2013-02-11 99 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