java如何设计批量GET调用? 1 周,3 日 Questions & Answers 210 设计API以促进批量GET请求的最佳方法是什么?我有一个用例,我希望将多个实体返回到一个服务,而不希望对每个资源进行一次GET调用
# 1 楼答案 拥有一个返回多个实体表示的资源是很好的。想想谷歌的搜索结果,堆栈溢出中的问题,亚马逊过去的订单 您确实需要了解缓存失效的含义。见RFC 7234。基本问题是,就通用组件而言,不同的资源是不相关的,使一个资源失效不会改变其他资源(在有限的情况下除外)。如果在两个不同的API键下缓存“相同”的信息,可能会导致不一致
# 2 楼答案 这是HTTP API的常见任务。因此,有两种普遍的解决方案 可以说,最常见的是使用POST请求。在POST请求的主体中,您应该指定您正在发出的请求的类型,以及您正在请求的内容。您应该在请求中给出一个类型,因为POST只是一个一般请求,服务器执行负载中给出的任何操作 例如: POST /resources Content-Type: application/json { "action": "get", "ids": [ 1, 2, 3 ] } 另一个选项是带有主体的GET请求。该请求可能与上面的POST请求类似,但不需要指定操作。您可以在ElasticSearch等项目中看到这种方法。当涉及到具有主体的GET请求时,HTTP规范的定义是模糊的(请参见RFC 7231) RFC特别指出: A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request. 虽然我不能代表ElasticSearch的开发人员发言,但我认为引用的最后一部分(“某些现有实现[可能]拒绝该请求”)是ElasticSearch同时接受批量请求的GET和POST请求的原因之一
# 3 楼答案 我认为这正在成为Data-as-a-service下的一个常见用例,在这种情况下,GET操作或POST(CUD)操作都有批量请求。架构的选择将由多个因素决定 我的回答仅基于数据量因素: 对于较小的卷,单个节点/服务器可以完成给定的请求,但如果您试图“查询”或“更新”数千或数百万条记录,该怎么办。这种情况可能需要将工作负载分配给多个工作节点,因此异步、事件驱动、容器化、消息传递的设置可能更合适 示例: 您可以向服务器发送一个请求,而服务器又可以将工作负载分配给多个工作人员,然后每个工作人员将响应发布到队列中,原始客户端可以在一段时间后从队列中获取结果
# 1 楼答案
拥有一个返回多个实体表示的资源是很好的。想想谷歌的搜索结果,堆栈溢出中的问题,亚马逊过去的订单
您确实需要了解缓存失效的含义。见RFC 7234。基本问题是,就通用组件而言,不同的资源是不相关的,使一个资源失效不会改变其他资源(在有限的情况下除外)。如果在两个不同的API键下缓存“相同”的信息,可能会导致不一致
# 2 楼答案
这是HTTP API的常见任务。因此,有两种普遍的解决方案
可以说,最常见的是使用
POST
请求。在POST
请求的主体中,您应该指定您正在发出的请求的类型,以及您正在请求的内容。您应该在请求中给出一个类型,因为POST
只是一个一般请求,服务器执行负载中给出的任何操作例如:
另一个选项是带有主体的
GET
请求。该请求可能与上面的POST
请求类似,但不需要指定操作。您可以在ElasticSearch等项目中看到这种方法。当涉及到具有主体的GET
请求时,HTTP规范的定义是模糊的(请参见RFC 7231)RFC特别指出:
虽然我不能代表ElasticSearch的开发人员发言,但我认为引用的最后一部分(“某些现有实现[可能]拒绝该请求”)是ElasticSearch同时接受批量请求的
GET
和POST
请求的原因之一# 3 楼答案
我认为这正在成为Data-as-a-service下的一个常见用例,在这种情况下,GET操作或POST(CUD)操作都有批量请求。架构的选择将由多个因素决定
我的回答仅基于数据量因素: 对于较小的卷,单个节点/服务器可以完成给定的请求,但如果您试图“查询”或“更新”数千或数百万条记录,该怎么办。这种情况可能需要将工作负载分配给多个工作节点,因此异步、事件驱动、容器化、消息传递的设置可能更合适
示例: 您可以向服务器发送一个请求,而服务器又可以将工作负载分配给多个工作人员,然后每个工作人员将响应发布到队列中,原始客户端可以在一段时间后从队列中获取结果