2016-02-12 77 views
1

我試圖使用etags爲了減少我的帶寬和我的配額使用,但/搜索返回一個新的etag,即使沒有任何改變。如果我在標題中指定了以前的etag,它仍然會發送內容。youtube api v3/search支持etags嗎?

是否支持該API調用或者我可能做錯了什麼?

回答

1

ETag是由YouTube的支持,但要看是什麼樣的數據,你是問

的ETag,HTTP協議標準的一部分,允許應用程序是指一個特定的API資源的特定版本。資源可以是整個Feed或該Feed中的項目。此功能支持以下用例:

緩存和條件檢索 - 您的應用程序可以緩存API 資源及其ETags。然後,當您的應用程序再次請求 存儲的資源時,它會指定與該 資源關聯的ETag。如果資源已更改,API將返回修改後的 資源以及與該版本資源關聯的ETag。如果 資源未更改,API將返回一個HTTP 304響應 (未修改),表示資源未更改。 您的應用程序可以通過以這種方式服務 緩存資源來減少延遲和帶寬使用。

Google API的客戶端庫在對ETags的支持方面有所不同。 例如,JavaScript客戶端庫通過 白名單支持ETags,其中包含If-Match和 If-None-Match。白名單允許正常的瀏覽器緩存發生,因此 如果資源的ETag沒有改變,資源可以從瀏覽器緩存服務 。另一方面,Obj-C客戶端不支持ETags 。防止無意中覆蓋更改 - ETags有助於確保多個API客戶端不會無意中覆蓋對方的更改。當更新或刪除資源時,您的應用程序可以指定資源的ETag。如果ETag沒有 匹配該資源的最新版本,則API請求 將失敗。

在應用程序中使用的ETag提供了幾個好處:

的API更快速響應的緩存,但不變 資源的請求,產生更低的延遲和更低的帶寬使用。您的 應用程序不會無意中覆蓋對另一個API客戶端創建的資源 的更改。

https://developers.google.com/youtube/v3/getting-started#etags

我經常刮的Youtube視頻進行搜索,我只是存儲的eTag它返回。要使用etag,請創建一個標頭請求並將「If-None-Match」與您的etag值相等。請注意,這應該是一個請求標頭,並且不會附加到端點調用。你也可以使用「If-Match」。

根據什麼樣的您正在使用的API,如果有結果集上沒有改變插入一個新值請求頭的方式可能略有不同

+0

,YouTube將發出錯誤304,並不會返回任何結果(在我的情況下),如果結果集上發生了變化,它將返回與前一個查詢匹配的所有結果。 – Vhortex

+0

我從頭端傳遞了一個標題爲「Etag」的標題,但我沒有意識到它必須使用「If-None-Match」來發送etag。謝謝您的幫助! – WinterDev