Java Web服务设计:RESTAPI应该发回一半还是全部信息?

Java Web服务设计:RESTAPI应该发回一半还是全部信息?,java,json,rest,web-services,Java,Json,Rest,Web Services,关于在拥有另一半信息时如何响应restful web请求的小问题 我想坚持这不是一个基于意见的问题,因为我认为应该有一个最佳答案来回答该怎么做 情景: 一些客户服务,service_A,是一种允许客户购买产品的服务。 然而,服务A只知道产品。也就是说,SERVICE_A不知道产品的价格,它需要呼叫SERVICE_B以实时获取产品的价格。话虽如此,服务商只知道一半的信息,只知道产品,而不知道产品的价格 客户将通过前端服务选择产品。客户无法转到其他服务。然后,服务_A将通过API使用产品调用服务_B

关于在拥有另一半信息时如何响应restful web请求的小问题

我想坚持这不是一个基于意见的问题,因为我认为应该有一个最佳答案来回答该怎么做

情景: 一些客户服务,service_A,是一种允许客户购买产品的服务。 然而,服务A只知道产品。也就是说,SERVICE_A不知道产品的价格,它需要呼叫SERVICE_B以实时获取产品的价格。话虽如此,服务商只知道一半的信息,只知道产品,而不知道产品的价格

客户将通过前端服务选择产品。客户无法转到其他服务。然后,服务_A将通过API使用产品调用服务_B(1)。 比如:

{
    "product": "someProduct"
}
然后,服务_B将接收请求(2),然后使用他知道的自己的算法(3)计算价格

完成后,SERVICE_B将把价格返回给SERVICE_A(4),SERVICE_A(4)现在拥有所有信息并可以向客户显示

  • 在第(1)点,服务A只知道一半的信息。只有产品

  • 在第(2)点,SERVICE_B在收到请求时也只知道一半的信息,只有产品

  • 在第(3)点,SERVICE_B将首次了解信息、产品和价格的一半

  • 在第(4)点,得到响应的服务_A也将得到两半

我的问题是,SERVICE_B是否应该只将他一半的信息发回SERVICE_A,让SERVICE_A重建整个信息?还是同时送回去

服务只发回价格。发送请求的服务\u A产品=1.2

{
    "price": 1.2
}
或者服务部应该把所有东西都寄回去

{
    "product": "someProduct",
    "price": 1.2
}
在我的示例中,我只使用一个字段。但实际上,还有很多。这只是一个例子

同样,这不是一个意见问题。我相信应该有一个基于性能、设计原则、微服务架构等的答案

多谢各位

我的问题是,SERVICE_B是否应该只将他一半的信息发回SERVICE_A,让SERVICE_A重建整个信息?还是同时送回去

REST中通常的答案是,服务_B将使用请求的资源的当前表示形式的副本来响应请求

GET /price-list?product=someproduct
本质上,您是在问产品是否应成为表述的一部分,对此我回答:

  • 当然,为什么不呢
  • 但你不必这么做
如果URI中有“更多”项,那么您可以选择想要的项

这可能有助于回顾菲尔丁的论文,特别是他关于缓存约束的评论

添加缓存约束的优点是,它们有可能部分或完全消除某些交互,通过减少一系列交互的平均延迟来提高效率、可伸缩性和用户感知的性能

换句话说,对于我们认为变化缓慢的信息,效率来自减少往返次数,而不是减少响应的大小

因此,您更有可能将额外的信息打包到响应中(假设缓存时间保持令人满意)


现在,如果您使用的不是REST,而是带有更多RPC字符(SOAP/graphQL/gRPC)的设计,那么答案可能会改变,因为当通用组件无法利用“缓存”时,“缓存”会失去很多功能

如果无论如何都会有额外的往返,那么保持有效负载更小是有意义的


对我来说,我倾向于包含客户提供的信息,因为这给了你一种解决某些类型错误的方法。但这是一种“其他一切平等”的立场。如果你需要小的,如果你真的需要它,那么在引入故障解决的支持时,你需要仔细考虑预算。< /P>有Service eA和Service eB单独存在的用例吗?如果是,则客户端调用服务_C,该服务协调调用服务_A和服务_B,并返回组合结果。总的来说,尽量减少客户的闲聊。谢谢安德鲁!服务_A和服务_B单独存在以回答此特定用例。客户必须致电服务A,因为服务A将有前端用于选择产品和显示价格等。。。