我正在尝试使用etags来减少带宽和配额使用量,但是/搜索会返回一个新的etag,即使没有任何变化。如果我在标题中指定了前一个etag,它仍然会发送内容。
是否支持api调用或我可能做错了什么?
答案 0 :(得分:2)
youtube支持Etags,但这取决于您要求的数据类型
ETAG是HTTP协议的标准部分,允许应用程序引用特定API资源的特定版本。资源可以是整个Feed或该Feed中的项目。此功能支持以下用例:缓存和条件检索 - 您的应用程序可以缓存API 资源及其ETag。然后,当您的应用程序请求时 再次存储资源,它指定与之关联的ETag 资源。如果资源已更改,则API将返回已修改的内容 资源和与该版本资源相关联的ETag。如果 资源未更改,API返回HTTP 304响应 (未修改),表示资源未更改。 您的应用程序可以通过服务减少延迟和带宽使用 以这种方式缓存资源。
Google API的客户端库对ETag的支持不同。 例如,JavaScript客户端库通过a支持ETag 允许请求标头的白名单,包括If-Match和 如果 - 无 - 匹配。白名单允许正常的浏览器缓存发生 如果资源的ETag没有改变,则可以提供资源 来自浏览器缓存。另一方面,Obj-C客户端没有 支持ETags。防止无意中覆盖更改 - ETag有助于确保多个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类型,将新值插入请求标头的方式可能略有不同