20

有谁知道批处理http请求的标准方法?含义 - 在一次往返中发送多个 http 原子请求?

出于性能原因,我们在 REST API 实现中需要这种机制。这种机制可以显着减少客户端使用 API 所需执行的往返次数。

提前致谢,

谢伊

4

7 回答 7

5

定义一个包含客户所需数据的新资源。见http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-743

于 2011-06-17T02:40:51.650 回答
5

有一种官方的 HTTP 方法可以做到这一点,称为HTTP Pipelining。但是浏览器端的问题可能比服务器端的问题多。因此,如果您仅在客户端具有高级别的控制,您也许可以使用它。

XHR 并不总是允许管道传输,并且 AFAIK 您无法控制使用 Javascript 的 HTTP 隧道。所以基本的 ajax-jQuery 实现不存在。但是您可能会发现 Comet 和 Bayeux 协议的一些高级功能,模拟双向长期 tcp 连接,您肯定会减少 tcp 往返行程。

我不是彗星专家,但您可能会在这篇Comet 和 HTTP 管道文章中找到有用的信息,据我了解,其中大部分内容都是高度实验性的,但至少当 HTTP 管道是无法使用。这可能需要重新标记或提出新问题。

于 2011-09-01T07:43:16.183 回答
3

这是 REST 的一个问题。它们处于实体级别。REST 的想法是让每个 URL 唯一地标识一个资源。当然你可以引入聚合资源。例如,www.yoursite.com/customerA?include=Orders,Faults,Incidents 这将返回 CustomerA 的 XML,但也将客户的订单、故障、事件作为嵌入式集合返回。

于 2011-06-17T13:23:06.697 回答
2

如果您正在查看基于 REST 的服务或某种 API。这里有一些标准的开始http://www.odata.org/documentation/odata-version-3-0/batch-processing/

谷歌在这里的实现https://cloud.google.com/storage/docs/json_api/v1/how-tos/batch

于 2014-12-23T20:28:20.697 回答
1

如果使用上述 fumanchu 所说的专用“聚合”资源对您不起作用,您也可以尝试将较少易失性资源的表示移动到缓存以减少系统负载。例如:“人类”Web 上的 HTML 页面通常包括加载和加载图像,并且许多子请求在那里无关紧要。

于 2011-09-01T06:54:27.623 回答
0

您可以通过在服务对象上调用 new_batch_http_request() 创建批处理请求,该服务对象返回一个 BatchHttpRequest 对象,然后为要执行的每个请求调用 add()。您可以在每个请求中传入一个回调,该请求是对该请求的响应而调用的。回调函数参数是每个 API 调用的唯一请求标识符、包含 API 调用响应的响应对象以及可以设置为由 API 调用引发的异常的异常对象。添加请求后,调用 execute() 来发出请求。execute() 函数阻塞,直到所有回调都被调用。

参考:

你也可以试试这个https://developers.google.com/api-client

库/python/指南/批处理

https://cloud.google.com/storage/docs/json_api/v1/how-tos/batch

于 2016-10-20T08:10:19.040 回答
0

卷曲

Windows 10(及以下版本)的 build 17063 附带CURL命令:

curl -X POST -H "Content-Type: application/json" -d "{\"name\": \"myname\", \"email\": \"some@example.com\"}' https://example/contact

winHttpJs.bat

call winhttpjs.bat "http://requestb.in/xxxxxx" -method POST -header hdrs.txt -reportfile reportfile2.txt

call winhttpjs.bat "http://requestb.in/xxxxxx" -method GET -header hdrs.txt -reportfile reportfile3.txt -saveTo c:\somezip.zip 

call winhttpjs.bat "http://requestb.in/xxxxxx" -method POST -header hdrs.txt -reportfile reportfile2.txt -saveTo responsefile2 -ua "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"  -body-file some.json

它目前不支持多部分请求,我打算添加这样的东西,但我不知道我什么时候有时间。

于 2020-11-10T14:47:43.863 回答