YouTube API V3和ETag

26

我使用YouTube API V3,并想了解Etag的工作原理。我想将其用于缓存的目的,但我不知道在PHP中该怎么做。 请告诉我一旦恢复了Etag,要遵循哪些步骤?谢谢帮助。


有关如何在PHP客户端中使用ETags的详细信息,请参阅http://stackoverflow.com/questions/27800007/google-api-php-client-send-etag/28321798#28321798。 - Coded Monkey
3个回答

32
根据 YouTube 文档 (https://developers.google.com/youtube/v3/getting-started#etags),eTag 基本用于确定资源是否更改。使用 eTag 优化如下:
  1. 优化 - 在应用中缓存 YouTube 资源可以减少带宽和延迟。在进行缓存时,请存储 eTag,以便在获取资源时包含它。如果资源未更改,您将收到状态码 304 (未修改),这意味着您可以使用缓存的版本。否则,您将获得更新后的资源版本。

  2. 配额使用 - 您可以通过缓存 YouTube 数据来减少对配额的使用。第一次获取资源时,您会耗用配额。在显示资源之前,首先检查您的缓存资源是否更改,这只会耗费您 1 个配额单位。如果资源没有更改,则 YouTube 将返回状态码 304。如果已更改,则可以再次获取资源,其成本取决于您要获取的内容而有所不同。有关您的配额更多信息请参见: (https://developers.google.com/youtube/v3/getting-started#quota)

  3. 覆盖保护 - 如果您要覆盖资源,请包括 eTag,以确保您不会覆盖较新版本的资源。

eTags是HTTP 1.1规范的一部分(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.19),用于请求/响应头中。以下是一篇关于eTags的低水平介绍的好文章:http://www.ibuildings.com/blog/2013/07/etags-uninitiated

至于在PHP中使用eTags,我只能建议几件事情,因为我从未尝试过。YouTube返回feeds和feed中的单个项的eTags,我不确定如何在feed中使用它们来获取单个项。但是要获取原始feed本身,您可以使用curl并将eTag添加到请求头(PHP cURL custom headers)。您还可以查看http_cache_etag(http://www.php.net/manual/en/function.http-cache-etag.php)。


非常感谢您的回答和 J Mac 的帮助。我会仔细研究的。 - Webmaster
4
@Redtopia,这个答案中的“配额使用”部分是不正确的。http://jsfiddle.net/fw3776vs/ 这个链接是Node.js代码(不幸的是不能在JSFiddle上运行),但它被设计为消耗价值1000配额点数的调用,但对于除第一个调用以外的所有调用都使用ETag。如果你在运行后查看控制台,会发现仍然使用了1000个配额点。请自己运行一下。 - ramr
+1 针对 @ramr 所说的内容。仅使用 etag 可以帮助客户端,但每次调用仅消耗 1 个配额使用量。 - John
1
@ramr - 并非所有的API调用都是等价的...一些调用比其他调用使用更多的配额。如果您正在缓存数据,则检查eTag版本将仅花费1个配额单位。如果资源已更新,则可以进行API调用,这将使用更多的配额来更新缓存的资源。 - Redtopia

4
我正在寻找类似的信息,但在youtube网站上找不到清晰的示例。另一方面,Facebook似乎正在使用类似的方法(Etags检查资源是否更改),而我在Facebook开发者区域找到的这两个链接可能会有所帮助: https://developers.facebook.com/docs/reference/ads-api/etags-reference/https://developers.facebook.com/blog/post/627/ 第一个链接以更简单、更详细的方式解释了如何使用ETags,并提供了一些请求/响应示例。
第二个链接提供了一个PHP示例,演示如何检索资源并提取ETag,在随后的请求中使用它。
当然,这些链接包含与Facebook网站相关的信息,但对于大部分情况,它们同样适用于YouTube。

1

我不确定是否还有人感兴趣,但我已经发布了一个关于如何在使用YouTube API 这里中使用ETag的答案。这个想法不仅适用于YouTube API。帖子很长,但希望它能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接