1

是否可以从不同来源的 API 进行一次查询?IE,

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

  • 客户:clientID、clientName
  • 订单:ordersID、clientID

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

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

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

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

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

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

  • 销售A
    • 客户名称 1
    • 客户名称 2
    • ETC
  • 销售B
    • 客户名称 1
    • 客户名称 3

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

那有意义吗?

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

有什么想法吗?

4

1 回答 1

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 服务)的端点,然后将它们组合成一个“消息”。

  • 无论你做什么,如果你在服务器之间拆分数据,你都会为查询付出更高的代价。如果实体位于同一服务器/数据库上,我无法想象性能会接近它的性能。

于 2013-02-13T01:16:32.680 回答