我们有3种产品可供用户订购。
例如:
假设:
3个微服务,根据时间戳为订单历史记录提供3个单独的分页响应。
需要:
按时间戳的降序显示所有3个来源的订单历史记录,并在用户滚动时将它们分页。即,根据时间戳和显示对3个来源的响应进行排序和合并。
用户可能已购买:
此外,购买的时间表也可能有所偏差。 例如: 用户仅用Itunes音乐购买了10首歌曲。
我能想到的方法:
1。只对客户进行重击:
将并行调用所有3个API,等待所有API的响应。 将它们存储在本地。
根据时间戳进行合并和排序。
剪裁最上面的n个项目并显示在设备上。
当用户滚动时,将检查本地是否存在任何数据并相应地调用API。
2。仅在服务器端进行重击:
拥有可与所有服务对话的代理。
收到客户fetchData (noOfItems, fetchedUntilTimestamp)
的请求后,
代理应通过为每个来源调用getData(noOfItems, fetchFromTimeStamp)
来获取不同来源的数据。
每个数据源都应从时间戳fetchFromTimeStamp及以下开始获取noOfItems并返回数据列表。
代理人应:
代理应返回客户端:RESULT_LIST + fetchedUntilTimeStamp
从下一次请求开始,客户应使用前一次呼叫中从服务器收到的fetchData (noOfItems, fetchedUntilTimestamp)
来呼叫fetchedUntilTimeStamp
两者中哪一个更受青睐?有没有更好的解决方法?
答案 0 :(得分:0)
这取决于您的环境。
如果服务器资源很贵,则应选择解决方案1.另请注意,服务器不需要调用三次。连接也是昂贵的资源,而且三个连接有更多的异常分支。服务器应该提供一个接口来返回所有三种项目。
否则你应该选择解决方案2.特别是有多个客户端,需要多个开发人员,在客户端实现需要多个工作,并且可能有多个错误。实施细节可能有所不同。所有这些都需要更多的测试。
最后,在实践中,解决方案可能由更大的声音决定。
答案 1 :(得分:0)
解决方案1的唯一优势是您不必创建新的门面服务来调用3个微服务。缺点是您的客户端代码变得更加复杂,如果添加第4个产品,您将不得不发布新客户端。
解决方案2使客户端变得更加简单。您可以轻松添加第4个产品(或删除产品)。您可以在服务器上比客户端更好地优化性能。
我总是试图在客户端和服务器上保留特定的业务知识(我们销售多少产品?)。