如何在YouTube API中使用ETags

显然,我们可以使用ETags来查看频道/播放列表是否已被更新或根据其文档中的以下声明:

当应用程序再次请求存储的资源时,它会指定与该资源关联的ETag。 如果资源发生了变化,那么API将返回与该资源版本关联的已修改资源和ETag。 如果资源没有改变,则API返回一个HTTP 304响应(Not Modified),表示资源没有改变。

但是我试图得到一个不会改变的频道数据,但是在刷新几次之后,似乎ETag跳转到了不同的值!

您不能再次击中端点并比较etag值; 相反,您必须提出请求,存储etag值,然后将etag值传递给随后的请求。 你将这样做是请求头…设置HTTP标头“If-None-Match”到你的etag的值。 如果没有任何改变,你会得到一个304(而不是任何内容或元数据)。 如果有什么变化,你会得到一个新的结果,你采取新的etag和存储它,而不是旧的。

用于Javascript的Google API客户端支持此标题; 当你创build你的gapi.client.request对象的时候,你会传入一个参数对象; 这个对象的其中一个参数是'headers',你可以在其中设置'If-None-Match'等于你要检查的etag。

(注意,还有一个'If-Match'头文件,它也可以和etags一起工作,如果资源是与之前请求的相同的资源,它将只返回内容…可能不是那么多用例,但它存在并受到支持。)