2013-02-11 58 views
1

是否有可能從不同來源的API進行查詢?即,來自多個API的一個查詢

在傳統的web開發如果我有以下幾個模塊:

  • 客戶:clientID的,CLIENTNAME
  • 訂單:ordersID,ClientID的

我會在一個數據庫中創建兩個表和外鍵與連接並使我的查詢。

我想要做的是用一個數據庫來創建2個數據庫,每個模塊一個(這樣我可以更容易地擴展每個模塊,因爲它更容易),並通過API「綁定」2個數據庫。

因此,我仍然會使用「外鍵」(即訂單表中的clientID)來「綁定」客戶和訂單,但由於它們不在同一個數據庫中,因此我無法「加入」它們。

所以,在我的界面我想有一個:

  • 客戶端API,如http:mysite.com/showallClientsAPI
  • OrdersAPI如http:mysite.com/showallOrdersAPI

將如何我做了一個查詢(或有可能),雖然模塊之間的API來獲得此響應:

  • SaleA
    • CLIENTNAME 1
    • CLIENTNAME 2
  • SaleB
    • CLIENTNAME 1
    • CLIENTNAME 3

我可以告訴所有訂單(http://mysite.com/showSalesAPI)客戶端ID = 1,但這會給我一個json響應與clientID而不是客戶端

這有道理嗎?你可能會問爲什麼我會這麼做,這是一個多模塊應用程序的一部分,它可以保持模塊獨立,而不是作爲龐大數據庫的一部分,用於將來的開發或與其他應用程序的交互)

有什麼想法?

回答

1

我喜歡分裂數據庫並將它們放在服務後面的想法,但我認爲應該小心謹慎地完成。如果您打算在客戶和訂單之間不斷加入,爲什麼要通過服務進行溝通?

的幾點思考:

  • 也許複製從服務器數據到服務器,這樣客戶端/訂單查詢可以迅速發生。這樣每個服務器仍然具有權威性。

  • 你當然可以在代碼中加入實體。你可以寫坐在每個API的頂部,然後做這樣的事情(C#)包裝:

 

List clientNames = new List(); 
var orders = OrderService.GetOrders(); 

foreach (var order in orders) 
{ 
    var client = ClientService.GetClient(order.ClientId); 
    clientNames.Add(client.FirstName + " " + client.LastName); 
} 

 

(注:這是低效率的,你可能想傳遞客戶端ID列表)

上面的東西會以簡單的方式調用兩個服務,然後在應用程序中「加入」它們。如果感覺工作太多,那麼考慮複製! =)

  • 使用像騾子(http://www.mulesoft.org/)來處理的一體化服務。使用Mule,您可以爲REST服務(或任何HTTP Web服務)創建端點,然後將它們一起加入到一個「消息」中。

  • 不管你做什麼,如果你將數據分割到不同的服務器上,你將會爲查詢支付更高的價格。我無法想象,如果實體位於同一臺服務器/數據庫上,性能將接近實際情況。

+0

謝謝您的回覆。將多個服務器分開的原因是我想將「訂單」或「客戶端」或其他任何東西視爲獨立模塊。這樣,如果我想在訂單模塊中更改某些內容,它不會直接影響應用程序的其餘部分。我明白,雖然我必須付出「表現價格」。也許複製是一個更好的解決方案。我會看着騾子。它看起來很有趣。 – user2062455 2013-02-13 03:23:13

+0

如果我將這些實體放在同一個服務器上但不同的數據庫實例中,性能會受到很大影響嗎? – user2062455 2013-02-13 08:20:11

+0

沒有,那很好。如果你問我,那將是非常高效的。 – ryan1234 2013-02-13 16:07:20