Following system colour scheme - Python 增強提案 Selected dark colour scheme - Python 增強提案 Selected light colour scheme - Python 增強提案

Python 增強提案

PEP 629 – PyPI Simple API 版本控制

作者:
Donald Stufft <donald at stufft.io>
BDFL 委託
Brett Cannon <brett at python.org>
討論至:
Discourse 帖子
狀態:
最終版
型別:
標準跟蹤
主題:
打包
建立日期:
2020年7月16日
釋出歷史:
2020年7月16日

目錄

注意

此 PEP 已於 2020年8月20日被接受。PyPI 於 2020年1月28日 合併了一個實現,標誌著此 PEP 為“最終”。

摘要

本 PEP 提議為 simple API 新增一種版本控制方法,以便客戶端可以確定特定倉庫支援 simple API 的哪些功能。

基本原理

在發展 simple API 時,客戶端希望能夠確定倉庫支援哪些功能。目前沒有機制可以做到這一點,除了透過檢視響應中的資料來嘗試檢測新功能,並檢視是否似乎正在使用特定功能。

這對於現代版本的客戶端來說,可以很好地確定倉庫是否支援它想要實現的所有功能,但它無法告訴舊版本客戶端倉庫支援它可能無法理解的功能,也無法允許訊息傳遞來表明它可能無法正確理解倉庫的輸出。

一個發生這種情況的場景是 `python-requires` 元資料逐步推出,雖然現有客戶端仍然可以成功使用倉庫,但它們缺乏理解這塊新資料的能力,而這些資料本可以指導它們的行為,為終端使用者選擇更好的檔案。

概述

本 PEP 提議在對 simple API 頁面的每個成功請求的響應中包含一個 meta 標籤,其中包含一個 `name` 屬性為“pypi:repository-version”,以及一個內容是 PEP 440 相容的版本號,並且進一步限制為僅為 Major.Minor,不包含 PEP 440 支援的任何附加功能。

這看起來會像

<meta name="pypi:repository-version" content="1.0">

在解釋倉庫版本時

  • 增加主版本號用於表示向後不相容的更改,這意味著現有客戶端將不再能有意義地使用該 API。
  • 增加次版本號用於表示向後相容的更改,這意味著現有客戶端仍然可以有意義地使用該 API。

至於具體構成向後不相容還是相容的更改,除了現有客戶端將能夠“有意義地”繼續使用 API 的廣泛建議之外,將由任何未來的 PEP 自行決定,並且可以包括新增、修改或刪除現有功能。

本 PEP 期望主版本號永遠不會增加,並且任何未來的主要 API 演進都將利用不同的 API 演進機制。然而,包含主版本號是為了與未來版本區分開來(例如,一個假設的 simple API v2 存在於 `/v2/`,但如果 `repository-version` 設定為 >= 2 的版本,則會令人困惑)。

本 PEP 將當前的 API 版本設定為“1.0”,並期望未來進一步發展 simple API 的 PEP 將增加次版本號。

客戶端

與 simple API 互動的客戶端 **應該** 檢查每個響應中的倉庫版本,如果該資料不存在,則 **必須** 假定其版本為 1.0。

當遇到大於預期版本的主版本號時,客戶端 **必須** 帶著適當的錯誤資訊硬失敗(立即中止)。

當遇到大於預期的次版本號時,客戶端 **應該** 向用戶發出適當的警告訊息。

客戶端 **可以** 仍然繼續使用功能檢測來確定倉庫使用了哪些功能。

被拒絕的想法

使用 HTTP 頭部

除了將此資訊嵌入到實際的 HTML 中,另一種選擇是使用 HTTP 頭部。這個想法被考慮過,但最終被拒絕,因為它會使映象不得不開始修改頭部,而不是能夠充當“傻瓜式”的檔案 HTTP 伺服器。

使用 URL

另一種傳統的 API 版本控制機制是將其嵌入到 URL 中,例如 /1.0/simple/ 等。這對於主要版本更改非常有效,因為舊的客戶端預計無法繼續使用它,但它不適用於次要版本升級,特別是當版本號在很大程度上可以被視為對終端使用者的建議時。


來源:https://github.com/python/peps/blob/main/peps/pep-0629.rst

最後修改:2025-02-01 08:55:40 GMT