跳至主要內容

穩定性與棄用

公開讀取 API 是有版本的。契約版本記錄在所提供的 OpenAPI 文件的 info.version 欄位中,會破壞用戶端的更改是一次版本升級,而不是悄悄的修改。

v1 保證什麼

在 v1 存更新間,它的路徑不會移動,錯誤 code 的含義不會改變,既有條件的狀態碼不會改變,欄位的類型或可空性也不會改變。任何會破壞這些的更改都屬於 v2,而不是 v1 的釋出。

v1 內允許、無需通知的更改

  • 新增端點。
  • 新增可選的查詢參數。
  • 在回應物件上新增欄位。
  • 新增回應標頭。
  • 在文件中標明為開放式的欄位上新增取值。
  • 提高速率限制額度。

需要新的主版本的更改

  • 移除欄位。
  • 重新命名欄位。
  • 更改欄位的類型或可空性。
  • 移除錯誤 code,或為其賦予新用途。
  • 更改既有條件對應的既有狀態碼。
  • 收緊限制。
  • 把可選參數變為必填。

你這一方的責任

用戶端必須容忍未知的欄位和未知的取值,並且不得解析面向人的 error 句子。 這是承諾的另一半,沒有它,上面的保證就不成立:拒絕接受自己不認識的欄位的用戶端,會在本頁稱為安全的更改上出錯;解析 error 的用戶端,會在句子被改寫時出錯。請根據 code 分支處理,忽略你不認識的內容,這樣每一次增量更改對你來說都不會有任何代價。

棄用

被棄用的操作或欄位會 在規格中 標記為 deprecated: true,並在其描述中給出原因和替代方案。規格是公告管道,因為它是每個用戶端都已經在讀的唯一產出——這樣程式碼產生器就能直接呈現棄用資訊,而不必有人事先看過某篇部落格文章。

舊的行為會在公告的期限內繼續有效。欄位絕不會被突然移除。

v2 將如何到來

它會作為第二個文件出現在第二個路徑上,與 v1 並行提供——而不是對它的重寫。v1 不會在 v2 釋出的那天停止工作,棄用 v1 本身也是一項遵循同一期限的公告。

規格中的 info.version 是 API 契約的版本,而不是應用程式的釋出版本號:它的主版本就是路徑版本,次版本在上面列出的增量更改發生時遞增,補丁版本在僅修訂文件時遞增。可以從任何回應中把它讀作 X-Motir-Api-Version——快速入門說明了在哪裡看。

本頁是已釋出的承諾。它所依據的內部記錄是 API 決策記錄,第 8 節。