Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何设计批量GET调用?_Java_Rest - Fatal编程技术网

Java 如何设计批量GET调用?

Java 如何设计批量GET调用?,java,rest,Java,Rest,设计API以促进批量GET请求的最佳方法是什么?我有一个用例,我想将多个实体返回到一个服务,而不想对每个资源进行一次GET调用。有一个资源返回多个实体的表示就可以了。想想谷歌的搜索结果,堆栈溢出中的问题,亚马逊过去的订单 您确实需要了解缓存失效的含义。看见基本问题是,就通用组件而言,不同的资源是不相关的——使一个无效不会改变其他资源(在有限的情况下除外)。如果在两个不同的API键下缓存“相同”的信息,则可能会导致不一致。使用一个资源返回多个实体的表示就可以了。想想谷歌的搜索结果,堆栈溢出中的问题

设计API以促进批量GET请求的最佳方法是什么?我有一个用例,我想将多个实体返回到一个服务,而不想对每个资源进行一次GET调用。

有一个资源返回多个实体的表示就可以了。想想谷歌的搜索结果,堆栈溢出中的问题,亚马逊过去的订单


您确实需要了解缓存失效的含义。看见基本问题是,就通用组件而言,不同的资源是不相关的——使一个无效不会改变其他资源(在有限的情况下除外)。如果在两个不同的API键下缓存“相同”的信息,则可能会导致不一致。

使用一个资源返回多个实体的表示就可以了。想想谷歌的搜索结果,堆栈溢出中的问题,亚马逊过去的订单


您确实需要了解缓存失效的含义。看见基本问题是,就通用组件而言,不同的资源是不相关的——使一个无效不会改变其他资源(在有限的情况下除外)。如果在两个不同的API键下缓存“相同”的信息,可能会导致不一致。

这是HTTP API的常见任务。因此,有两种普遍的解决方案

可以说,最常见的是使用
POST
请求。在
POST
请求的正文中,您应该指定您提出的请求类型和请求内容。您应该在请求中给出一个类型,因为
POST
只是一个一般请求,服务器执行负载中给出的任何操作

例如:

POST /resources
Content-Type: application/json

{
  "action": "get",
  "ids": [
    1,
    2,
    3
  ]
}
另一个选项是带有主体的
GET
请求。该请求可能与上面的
POST
请求类似,但不需要指定操作。您可以在项目中看到这种方法,例如。当涉及到具有主体的
GET
请求时,HTTP规范的定义很模糊(请参阅)

RFC特别指出:

GET请求消息中的有效负载没有定义的语义; 在GET请求上发送有效负载正文可能会导致某些现有错误 实现拒绝请求


虽然我不能代表ElasticSearch的开发人员发言,但我认为引用的最后一部分(“某些现有实现[可能]拒绝请求”)是ElasticSearch同时接受批量请求的
GET
POST
请求的原因之一,这是HTTP API的常见任务。因此,有两种普遍的解决方案

可以说,最常见的是使用
POST
请求。在
POST
请求的正文中,您应该指定您提出的请求类型和请求内容。您应该在请求中给出一个类型,因为
POST
只是一个一般请求,服务器执行负载中给出的任何操作

例如:

POST /resources
Content-Type: application/json

{
  "action": "get",
  "ids": [
    1,
    2,
    3
  ]
}
另一个选项是带有主体的
GET
请求。该请求可能与上面的
POST
请求类似,但不需要指定操作。您可以在项目中看到这种方法,例如。当涉及到具有主体的
GET
请求时,HTTP规范的定义很模糊(请参阅)

RFC特别指出:

GET请求消息中的有效负载没有定义的语义; 在GET请求上发送有效负载正文可能会导致某些现有错误 实现拒绝请求


虽然我不能代表ElasticSearch的开发人员发言,但我希望引用的最后一部分(“一些现有的实现[可能]拒绝该请求”)ElasticSearch同时接受批量请求的
GET
POST
请求,这是原因之一

我认为这正在成为Data-as-a-service下的一个常见用例,在Data-as-a-service中,存在批量请求进行GET操作或POST(CUD)操作。架构的选择将由多个因素决定

我的回答仅基于数据量因素: 对于较小的卷,单个节点/服务器可以完成给定的请求,但如果您试图“查询”或“更新”数千或数百万条记录,该怎么办。这种情况可能需要将工作负载分配给多个工作节点,因此异步、事件驱动、容器化、消息传递的设置可能更合适

示例:
您可以向服务器发送一个请求,服务器可以将工作负载分配给多个工作人员,然后,每个工作者将响应发布到队列中,原始客户端可以在一段时间后从该队列中获取结果。

我认为这正在成为Data-as-a-service下的一个常见用例,在Data-as-a-service中,存在对GET操作或POST(CUD)操作的批量请求。架构的选择将由多个因素决定

我的回答仅基于数据量因素: 对于较小的卷,单个节点/服务器可以完成给定的请求,但如果您试图“查询”或“更新”数千或数百万条记录,该怎么办。这种情况可能需要将工作负载分配给多个工作节点,因此异步、事件驱动、容器化、消息传递的设置可能更合适

示例:
您可以向服务器发送一个请求,服务器可以将工作负载分配给多个工作人员,然后,每个工作进程将响应发布到队列中,原始客户端可以从队列中经过一段时间后获取结果。

您可以公开新的端点,该端点使用参数列表查找并返回所有一次性GOT。用于按适当条件进行实体筛选的查询参数应该可以工作。请记住