如何通过http从一个服务到另一个服务获取排序数据

时间:2017-03-01 18:42:22

标签: microservices api-design

我有面向服务的架构,有几个服务。

  • 产品 - 商品列表

    { id: number, price: number }

  • 类别 - 商店类别信息+产品ID列表

    { id: number, parentCategory: number, productIds: number[] }

让我们假设我有这样的类别实例

{
   id: 1,
   parentCategory: null,
   productIds: [1, 3, 4, 5, ....]
}

我需要从产品价格中选择上面列出的10个产品。

请求的类别服务流程,因为它不知道有关它向产品服务发出请求的价格的任何信息:

/api/products?
   ids=<list of all product ids>
   limit=10
   sortBy=price

当该类别包含大量产品时效果不佳。

这种情况下的配方是什么? 感谢。

2 个答案:

答案 0 :(得分:2)

我同意胜利者 - POST请求可以解决潜在的问题。如果您担心性能,例如,在数千个ID的情况下,您应该考虑将这些服务合并在一起。或者在类别服务中重复价格数据。

出于性能原因,数据复制和将多个服务合并为一个是微服务架构中的正常情况。但是,如果您的产品服务仅存储信息并且没有任何业务逻辑,那么我肯定会考虑合并。

另外,请考虑让所有ID已经在Categories服务中排序。对我来说,如果产品服务不会做任何有用的业务并且只进行排序

,那么这将是最好的解决方案

答案 1 :(得分:1)

您应该使该端点仅接收Http Post,然后您应将所有产品ID放在请求正文中。像这样:

{   &#34; IDS&#34; :[],(包含所有id的数组)   &#34;限制&#34;:10,   &#34; sortBy&#34;:&#34;价格&#34; }

不确定为什么你有这个字段&#34;限制&#34;,我认为控制限制的是你传入的ID数。