2011-06-17 128 views
15

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

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

由于提前,

吉文

+1

活路HTTP连接。 – hakre 2011-06-17 00:29:23

回答

2

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

+0

+1,当人们没有/找不到任何新的专用集合资源时,他们往往转而​​采用更复杂的技术,而不是仅仅将普通数据集展平。 – tne 2013-08-06 09:53:10

1

如果使用上面提到的fumanchu专用的'聚合'资源不适合您,您还可以尝试如果可以将不稳定资源的表示移至缓存以减少系统负载。例如:'人类'网页上的HTML页面通常包含大量的图片和大量的图片,而许多子请求并不在意。

4

有一个官方的HTTP方式来做到这一点,这就是所谓的HTTP Pipelining。但是,浏览器端可能比服务器端出现更多问题。因此,如果您只在客户端拥有较高级别的控制权,您可以使用它。

XHR并不总是允许pipeling,并且AFAIK你没有使用Javascript控制HTTP隧道。所以基本的ajax-jQuery实现不能存在。但是你可能会发现Comet和Bayeux协议有一些先进的东西,模拟双向长期tcp连接,你肯定会减少tcp往返。

我不是一个彗星专家,但你可能会发现这个Comet & HTTP Pipeling article有用的信息,据我的理解,大部分这是高度实验性的,但至少你可以有一个很好的fallback与'经典'彗星HTTP管道时无法使用。这可能需要重新编辑或新的问题。

0

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

参考文献:

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

库/蟒蛇/引导/批

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