来自多个API的一个查询

时间:2013-02-11 20:03:48

标签: javascript api web-applications

是否可以从不同来源的API发出一个查询?即,

在传统的Web开发中如果我有以下模块:

  • 客户端:clientID,clientName
  • 订单:ordersID,clientID

我会在一个数据库中创建2个表,使用连接创建外键并进行查询。

我想要做的不是一个数据库来创建2个数据库,每个模块一个(这样我可以扩展每个模块,因为它自己的实体更容易),并通过API“绑定”2个数据库。

所以,我仍然会使用“外键”(即Orders表中的clientID)来“绑定”客户端和订单,但我无法“加入”它们,因为它们不在同一个数据库中。

所以,在我的界面中我会有一个:

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

我如何通过模块之间的API来进行查询(或者是否可能)以获得此响应:

  • SaleA
    • clientName 1
    • clientName 2
  • SaleB
    • clientName 1
    • clientName 3

我可以显示所有具有clientID = 1的订单(http://mysite.com/showSalesAPI),但这会给我一个带有 clientID 的json响应,而不是 clientName

这有意义吗?

(你可能会问我为什么要这样做。这是多模块应用程序的一部分,将模块分开而不是作为庞大数据库的一部分,以便将来开发或与其他应用程序交互是有意义的)

有什么想法吗?

1 个答案:

答案 0 :(得分: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列表)

像上面这样的东西会以一种简单的方式调用两个服务,然后在你的应用程序中“加入”它们。如果这感觉太多工作,那么考虑复制! =)

  • 使用Mule(http://www.mulesoft.org/)之类的东西来处理服务的集成。使用Mule,您可以为REST服务(或任何HTTP Web服务)创建端点,然后将它们连接成一个“消息”。

  • 无论您做什么,如果您跨服务器拆分数据,您将为查询支付更高的价格。我无法想象,如果实体位于同一台服务器/数据库上,性能将会接近它。