回溯相容性規範

每個 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 時,功能才會有所變更,因此程式碼不必嘗試處理這類變更。

關於這份文件

本文件包含以下章節:

  • 「API 要求」專區會定義與 HTTP 要求標頭、API 要求參數、XML 元素名稱 (在 API 要求中顯示的名稱) 和格式不正確的 API 要求相關的回溯相容性指南。

  • 「API 回應」部分定義了與 XML 元素名稱 (在 API 回應中顯示的名稱) 相關的回溯相容性指南,以及 XML 標記和屬性在 API 回應中顯示的順序。

  • 最佳做法一節概述了將 YouTube API 與用戶端應用程式整合的建議。

API 要求

不打算變更的功能

  • 現有要求參數。

  • 具有列舉值的參數現有參數值,或這些參數值的含義。

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

  • 每種 API 要求類型所需的 HTTP 要求標頭組合。這項規範表示 YouTube 不打算新增必要的 HTTP 要求標頭,也不會將現有的選用要求標頭變更為必要標頭。

  • 行為:除非要求使用 strict 參數,否則會忽略 API 要求中的不支援參數,這會指示 YouTube 拒絕包含無效要求參數的 API 要求。

可能會變更的功能

  • YouTube 可能會新增選用要求參數。

  • YouTube 可能會為具有列舉值集的現有參數新增值。

  • YouTube 會拒絕任何要求,如果有效參數含有無效參數值,因此,如果剖析邏輯經過修正,由於剖析過於寬鬆而接受的格式不正確要求,可能會遭到拒絕。

  • YouTube 可能會新增選用的 HTTP 要求標頭。

  • YouTube 在插入或更新資源時,可能會變更所保留 (儲存) 的資訊。不過,這類決定不會影響或要求變更對應 API 要求的語法。

  • YouTube 可能會變更可瀏覽的類別組合,或可指派給新上傳影片的類別組合。

  • 未說明的功能隨時可能會移除或變更。

API 回應

不打算變更的功能

  • 現有的 XML 標記名稱。

  • 依循媒體 RSS 規格,判斷該規格中定義的元素順序,以及在動態消息項目中出現多次的元素順序。舉例來說,如果項目包含多個 <media:thumbnail> 標記,系統會依重要性排序。

  • <category> 標記的 term 屬性值,用於識別動態饋給或動態饋給項目所描述的項目類型。在 <feed><entry> 標記中,<id> 標記會指定項目所識別的專屬資源,而 <category> 標記則會識別項目所描述的資源類型。對於這個 <category> 標記,方案屬性的值為 http://schemas.google.com/g/2005#kind,而詞彙屬性的值則表示動態饋給項目是否描述影片、播放清單連結、訂閱項目、聯絡人或其他實體類型。

可能會變更的功能

  • YouTube 可能會在 API 回應中新增 XML 標記。

  • YouTube 可能會在現有 XML 標記中新增屬性。

  • 您可以使用不同的值重複現有 API 標記。舉例來說,YouTube 可以新增 <media:restriction> 代碼,並使用不同的 type 值,或是新增 <media:credit> 代碼,並使用不同的 schemerole

  • API 回應中的 XML 標記和屬性順序可能會變更。

  • 選用的子標記可能會從 API 回應中移除。

  • 未說明的功能隨時可能會移除或變更。

最佳做法

  • 使用 <id> 標記值來識別項目。

  • 使用 self 連結擷取項目。

  • 使用 edit 連結編輯或更新項目。

  • 使用影片項目的 <yt:videoid> 標記值,即可取得 YouTube 用來識別該影片的專屬值。請勿剖析連結中的影片 ID。

  • 使用 <link><content><gd:feedLink> 標記中指定的網址,在動態饋給之間瀏覽。YouTube 支援的網址有限,您可以透過這些網址擷取特定動態饋給。除了下列的動態饋給網址外,請勿自行建立動態饋給網址,因為這些網址可能會突然停止運作。

    • /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 回應中網址的數字或英文字母 ID。API 回應會納入特定標記,用於連結至 YouTube 網站上的資源,例如影片 ID (<yt:videoid>) 和使用者名稱 (<name><media:credit>).)

  • 如果您提交 API 要求來插入 (POST) 或更新 (PUT) 資訊,請使用該要求的 XML 回應,判斷 YouTube 實際儲存了哪些標記值。如API 要求的向後相容性規範所述,YouTube 在插入或更新資源時,可能會變更保留 (儲存) 的資訊,也就是說,要求中的部分標記可能會遭到忽略。

  • 擷取 XML 動態饋給時,如果應用程式允許使用者更新該項目,請儲存與動態饋給項目相關的未知 XML 標記和屬性。如果使用者更新資源,您的應用程式應在更新要求中加入任何未知的標記和屬性。這項做法可確保應用程式在更新資源的過程中,不會不小心刪除與新 API 功能相關的資訊。

    以下範例說明這項最佳做法:

    1. 您的應用程式可讓使用者更新影片說明。
    2. 您的應用程式使用 API 擷取影片項目,但無法辨識項目中的其中一個標記。
    3. 使用者修改影片說明。
    4. 您的應用程式必須將完整的影片項目傳回 API。項目必須包含步驟 2 中的未知標記,否則系統可能會刪除該值。

  • 請先確認代碼存在且含有非空值,再嘗試顯示代碼值。

  • 如上所述,YouTube 可能會為現有標記或屬性 (具有列舉的值集) 新增值。一般來說,程式碼應剖析具有列舉值集的 XML 元素值,然後定義相應的動作。即使元素只列舉一個可能的值,也建議採用這種做法。

    例如,<media:credit> 標記可用來識別影片擁有者。標記的 role 屬性只有 uploader 這個已記錄的值,表示影片是由 YouTube 合作夥伴上傳。這項最佳做法規定,應用程式必須先確認標記的 role 屬性值確實為 uploader,才能將對應使用者識別為影片擁有者。(這項預防措施可確保 YouTube 為影片新增其他類型的製作人員 (例如導演) 時,您的程式碼不會誤認影片擁有者。)

    • 如果標記含有枚舉的值集,而您無法辨識該標記的值,則應忽略標記所在的整個 <entry>

    • 如果 <category> 標記的 scheme 屬性值為 http://gdata.youtube.com/schemas/2007/subscriptiontypes.cat,而您無法辨識 term 屬性值,請忽略訂閱動態饋給項目。該特定標記會標示項目所代表的訂閱類型。如果應用程式無法辨識訂閱類型,則不應顯示該項目的相關資訊。

    • 如果其他屬性有列舉的值集,而您不認識該屬性的值,則應忽略該屬性出現的標記。

  • 應用程式程式碼應隨時都能接收 yt:error 訊息。如果 API 作業失敗,應用程式應識別錯誤,並向使用者顯示有意義的訊息。

  • YouTube 隨時可能會新增類別,用於分類影片。YouTube 也可能會更新或淘汰現有類別。你可以從 http://gdata.youtube.com/schemas/2007/categories.cat 擷取目前的類別檔案

    • 如果您的應用程式可讓使用者依類別瀏覽或上傳影片,請每週擷取更新的類別檔案。

    • 如果您的應用程式可讓使用者依類別瀏覽影片,當 API 針對類別搜尋傳回空白動態消息時,請一併擷取更新的類別檔案。

    • 如果您的應用程式允許使用者上傳影片,請在上傳影片前擷取更新的類別檔案,並確認與上傳影片相關聯的類別仍可指派。詳情請參閱參考指南。(請注意,如果您嘗試將影片指派給無法指派的類別,API 會傳回錯誤訊息,其中 <code> 標記的值為 deprecated)。

  • 在 API 回應中使用 <link> 標記,即可識別動態消息中前一個和/或下一個項目頁面的分頁連結。詳情請參閱參考指南的「瀏覽結果」一節。