2017-03-01 65 views
1

我有面向服务的体系结构和几个服务。如何通过http从一个服务获取排序后的数据到另一个服务

  • 产品 - 产品

    { id: number, price: number }

  • 分类商店名单 - 店铺分类信息+产品ID列表

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

让我们假设我有这样的类别insta nce

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

我需要从上面的类别中获得10个产品,按产品价格排序。

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

将不能很好地工作时,类别有:

该请求,并因为它不知道价格什么它发出请求到这样的产品服务种类服务流程很多产品。

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

+0

为什么你需要得到这些ids重新排序?可能你不应该收到他们回来?但是可以通过产品服务将它们传递给他们,在那里他们可以被排序并在另一个服务调用中传回,而不是以正确的顺序响应?你必须以这种或那种方式传递这些ID,否则你需要让他们已经在Categories服务中排序, – cassandrad

+0

@cassandrad不,我不希望收到排序的ID。 本质上,сategory会要求对产品ID(属于某个类别的ID)的预定义列表进行排序,并仅返回10个产品项目。而且我很担心,例如,该类别将有1000个产品ID,它必须通过HTTP请求发送所有这些ID。 –

+0

您能否在您的问题的两种服务中添加数据示例? – cassandrad

回答

2

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

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

此外,请考虑让所有ID已在Categories服务中排序。对我来说,这将是这种情况下的最佳解决方案,如果产品服务不会做任何有用的业务和只有排序

1

您应该让该端点只接收Http Post,然后您应该将所有产品ID放在请求的正文中。事情是这样的:

{ “IDS”:[], “限制”(在它所有的ID的数组):10, “sortBy”: “价格” }

不知道为什么你有“限制”字段,我认为控制限制的是你传递了多少个ID。

+0

在我的情况下,类别总是必须发送所有产品id(它不知道如何对它们进行排序),并要求产品服务排序并且只返回10个产品 –

+0

没问题。在Http Post正文中发送请求仍然可以解决您在网址中耗尽空间的问题。 – victor