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