向后兼容性准则

每个 YouTube Data API 请求都可以指定 YouTube 应使用哪个 API 版本来处理该请求。如果请求未指定 API 版本,YouTube 将使用最早的受支持 API 版本来处理该请求。目前支持的最早版本是 1。请注意 API 版本号的以下特征:

  • YouTube 可能会发布特定 API 版本的更新,但不会为该版本分配新的版本号。这些向后兼容的更新会包含可选的 API 功能和/或错误修正程序。

  • API 版本号的增加表明推出了新版本,其中所包含的更改与先前的 API 版本不兼容。

本文档定义了针对特定 API 版本的更新(上文中列出的第一个项目)的向后兼容性准则。这些准则旨在区分以下两种类型的 API 功能:

  • 这些准则指出了哪些 API 功能可能会发生变化,即使您不修改应用于处理 API 请求的 API 版本也是如此。您的代码应能够处理这些更改,而不会中断。例如,如果 YouTube 在 API 响应中添加了新的 XML 标记,您的代码应忽略这些标记。

  • 这些准则还定义了 YouTube 在更新特定 API 版本时不打算更改的 API 功能。也就是说,只有在 YouTube 发布新的 API 版本,并且此类更改不会影响您的代码时,YouTube 才会更改这些功能。

关于此文档

本文档包含以下几个部分:

  • API 请求部分定义了与 HTTP 请求标头、API 请求参数、XML 元素名称(在 API 请求中显示的名称)和格式不正确的 API 请求相关的向后兼容性准则。

  • “API 响应”部分定义了与 XML 元素名称(在 API 响应中显示的名称)以及 XML 标记和属性在 API 响应中显示的顺序相关的向后兼容性准则。

  • 最佳实践部分概述了有关将 YouTube API 与客户端应用集成的建议。

API 请求

不希望更改的功能

  • 现有的请求参数。

  • 具有枚举值的参数的现有参数值或这些参数值的含义。

  • 在 API POST(插入)或 PUT(更新)请求中使用的 XML 元素名称。

  • 每种类型的 API 请求所需的一组 HTTP 请求标头。这些准则说明了 YouTube 不希望添加必需的 HTTP 请求标头,也不希望将现有的可选请求标头更改成必需的请求标头。

  • 除非请求使用 strict 参数(用于指示 YouTube 拒绝包含无效请求参数的 API 请求),否则会忽略 API 请求中的不受支持的参数。

可以更改的功能

  • YouTube 可添加可选的请求参数。

  • YouTube 可为具有枚举值集合的现有参数添加新值。

  • 如果有效参数包含无效参数值,YouTube 可能会拒绝任何请求。这样,对于因解析标准不够严格而获得通过的格式不正确的请求,在解析逻辑更正后会遭到拒绝。

  • YouTube 可添加可选的 HTTP 请求标头。

  • YouTube 可能会在插入或更新资源时更改其保留(存储)的信息。但是,选择更改不会影响也不必更改相应 API 请求的语法。

  • YouTube 可能会更改可浏览的类别组或新上传的视频指定加入的类别组。

  • 我们随时会删除或更改未记录的功能。

API 响应

不希望更改的功能

  • 现有的 XML 标记名称。

  • 遵循 Media RSS 规范,确定该规范中定义且在 Feed 条目中多次出现的元素的顺序。例如,如果某个条目包含多个 <media:thumbnail> 标记,则这些标记会按重要性排序。

  • <category> 标记的 term 属性值,用于标识 Feed 或 Feed 条目中所述商品的类型。在 <feed><entry> 标记中,<id> 标记用于指定条目标识的唯一资源,<category> 标记用于标识条目描述的资源类型。对于此 <category> 标记,scheme 属性的值为 http://schemas.google.com/g/2005#kind,term 属性的值表示 Feed 条目描述的是视频、播放列表链接、订阅、联系人还是其他实体类型。

可以更改的功能

  • YouTube 可在 API 响应中添加新的 XML 标记。

  • YouTube 可在现有的 XML 标记中添加新的属性。

  • 现有 API 代码可能以不同的值重复使用。例如,YouTube 可以添加具有不同 type 值的新 <media:restriction> 标记,也可以添加具有不同 schemerole 的新 <media:credit> 标记。

  • 在 API 响应中,XML 标记和属性的顺序可能会更改。

  • 可选的子标记可以从 API 响应中删除。

  • 我们随时会删除或更改未记录的功能。

最佳做法

  • 使用 <id> 标记值来标识条目。

  • 使用 self 链接检索条目。

  • 使用 edit 链接修改或更新条目。

  • 使用视频条目的 <yt:videoid> 标记值可获取 YouTube 用来唯一标识该视频的值。请勿解析链接中的视频 ID。

  • 使用 <link><content><gd:feedLink> 标记中标识的网址在 Feed 之间导航。YouTube 支持一组有限的网址,您可以构建这些网址来可靠地检索特定 Feed。除了下文列出的供稿网址以外,您不得创建自己的供稿网址,因为这些网址可能意外中断。

    • /feeds/api/videos/<videoid>
    • /feeds/api/users/default
    • /feeds/api/users/default/uploads
    • /feeds/api/users/default/favorites
    • /feeds/api/users/default/contacts
    • /feeds/api/users/default/inbox
    • /feeds/api/users/default/playlists
    • /feeds/api/users/default/subscriptions
    • /feeds/api/users/default/newsubscriptionvideos
    • /feeds/api/standardfeeds/regionID/feedID_CATEGORY_NAME(如需了解详情,请参阅参考指南

  • 请勿尝试解析 API 响应中网址中的数字或字母数字标识符。API 响应包含与 YouTube 网站上的资源(例如视频 ID [<yt:videoid>] 和用户名 [<name><media:credit>).])相关联的标识符的特定标记

  • 如果您提交 API 请求以插入 (POST) 或更新 (PUT) 信息,请使用对该请求的 XML 响应来确定 YouTube 实际存储了请求中的哪些代码值。如 API 请求的向后兼容性准则中所述,YouTube 可能会在插入或更新资源时更改其保留(存储)的信息,这意味着请求中的某些标记可能会被忽略。

  • 检索 XML Feed 时,如果您的应用允许用户更新 Feed 条目,请存储与 Feed 条目相关的未识别 XML 标记和属性。如果用户更新资源,您的应用应在更新请求中包含所有无法识别的标记和属性。这种做法确保了您的应用程序不会在更新资源的过程中不慎删除新 API 功能的相关信息。

    以下示例说明了这种最佳做法:

    1. 您的应用程序可以让用户更新视频说明。
    2. 您的应用使用 API 检索视频条目,但无法识别条目中的某个标记。
    3. 用户修改了此视频说明。
    4. 您的应用需要将完整的视频条目发回给 API。此条目必须包含第 2 步中的未识别标记,否则相应的值可能会删除。

  • 请先确定标记存在并且包含非零值,然后再尝试显示标记值。

  • 如上所述,YouTube 可能会为具有枚举值集的现有标记或属性添加新值。通常,您的代码应解析具有枚举值集的 XML 元素的值,然后定义适用于这些值的操作。即使该元素只有一个可用的枚举值,也推荐采用这种做法。

    例如,<media:credit> 标记用于标识视频的所有者。该标记的 role 属性的唯一已记录值为 uploader,表示视频是由 YouTube 合作伙伴上传的。此最佳实践规定,您的应用应先确认标记的 role 属性的值确实为 uploader,然后再将相应的用户标识为视频所有者。(此预防措施可确保,如果 YouTube 为视频添加了其他类型的制作人员名单(例如导演),您的代码不会错误地识别视频所有者。)

    • 如果某个标记具有一组枚举值,而您不认识该标记的值,则应忽略该标记所在的整个 <entry>

    • 如果您不认得 <category> 标记的 term 属性值(其 scheme 属性值为 http://gdata.youtube.com/schemas/2007/subscriptiontypes.cat),请忽略订阅 Feed 条目。该特定标记用于标识条目标识的订阅类型。如果您的应用程序无法识别订阅类型,则不应显示有关该条目的信息。

    • 如果任何其他的属性具有枚举值集合而您无法识别该属性的值,您应当忽略该属性所对应的标记。

  • 您的应用代码应随时预期收到 yt:error 消息。如果 API 操作失败,则您的应用程序应识别出错误并向用户显示实用的讯息。

  • YouTube 可能会随时添加新的视频分类。YouTube 也可能会更新或弃用现有类别。您可以从 http://gdata.youtube.com/schemas/2007/categories.cat 检索当前类别文件

    • 如果您的应用程序可以让用户按类别浏览视频或上传视频,请每星期检索更新的类别文件。

    • 如果您的应用程序可以让用户按类别浏览视频,则在 API 响应类别搜索时返回空供稿的情况下,请同样检索更新的类别文件。

    • 如果您的应用允许用户上传视频,请在上传视频之前还检索更新后的类别文件,并确认与上传的视频关联的类别是否仍可分配。如需了解详情,请参阅参考指南。(请注意,如果您尝试将视频分配给无法分配的类别,API 将返回一个 错误消息,其中 <code> 标记的值为 deprecated。)

  • 在 API 响应中使用 <link> 标记可识别 Feed 中前一页和/或下一页条目的分页链接。如需了解详情,请参阅参考指南的将结果分页部分。