-
28-10-2019 - |
题
有人知道批处理HTTP请求的标准方法吗? 含义-一次往返发送多个http原子请求?
出于性能原因,我们在REST API实现中需要这种机制。这种机制可以大大减少客户端使用API所需执行的往返次数。
预先感谢
谢伊
解决方案
定义一个新资源,其中包含客户端所需的数据。参见 http://roy.gbiv。com / untangled / 2008 / rest-apis-必须是超文本驱动的#comment-743
其他提示
有一种执行此操作的官方HTTP方法,称为 HTTP管道。但是,与服务器端相比,浏览器端可能会有更多问题。因此,如果仅在客户端具有高级别的控制,则可以使用它。
XHR并不总是允许管道传输,并且AFAIK不能控制使用Javascript进行HTTP隧道传输。因此,不存在基本的ajax-jQuery实现。但是,您可能会发现Comet和Bayeux协议具有一些高级功能,它们可以模拟双向长期tcp连接,从而肯定会减少tcp往返行程。
我不是彗星专家,但是您可能会在 Comet和HTTP Pipeling文章,据我所知,大多数内容都是实验性的,但至少在HTTP Pipelines不可用时,您至少可以使用“经典”彗星进行回退。这可能需要重新标记或提出新问题。
这是REST的问题。它们在实体级别。REST的想法是让每个URL唯一标识资源。 当然,您可以引入聚合资源。例如,www.yoursite.com / customerA?include=订单,故障,事件 这将返回CustomerA的XML,但也将客户的订单,故障,事件作为嵌入式集合返回。
如果按照上面fumanchu所述使用专用的“聚合”资源对您不起作用,您还可以尝试是否可以将易失性较小的资源表示转移到缓存中以减少系统负载。例如:“人类”网络上的HTML页面通常包含大量图片,而其中的许多子请求都不在乎。
如果您正在寻找基于REST的服务或某种API。在 http:// www处有一些标准的开头。odata.org/documentation/odata-version-3-0/batch-processing/
以及Google在此处的实现 https:// cloud。google.com/storage/docs/json_api/v1/how-tos/batch
您可以通过在服务对象上调用new_batch_http_request()来创建批处理请求,该服务对象将返回BatchHttpRequest对象,然后为要执行的每个请求调用add()。您可以在每个请求的响应中调用每个请求,并传递一个回调。回调函数参数是每个API调用的唯一请求标识符,包含API调用响应的响应对象以及可以设置为API调用引发的异常的异常对象。添加请求后,调用execute()发出请求。 execute()函数将阻塞,直到所有回调都被调用为止。
参考文献:
您也可以尝试 https://developers.google.com/api-client
library / python / guide / batch
https://cloud.google.com/storage/ docs / json_api / v1 / how-tos / batch