2011-06-17 169 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