微版本¶
API v2.1 支持微版本:API 的小型、文档化的变更。用户可以使用微版本来发现云环境中支持的最新 API 微版本。升级以支持更新微版本的云仍然支持所有旧微版本,以保持与依赖旧微版本的用户的向后兼容性。用户还可以通过微版本轻松发现新功能,从而受益于当前云的所有优势和改进。
以下是一些可以使用微版本解决的场景
较旧的客户端与新的云
在使用旧客户端与较新的云通信之前,旧客户端可以检查微版本的最低版本,以验证云是否与旧 API 兼容。这可以防止旧客户端因向后不兼容的 API 变更而出现故障。
目前微版本的最低版本是
2.1,它与旧版 v2 API 兼容。这意味着旧版 v2 API 用户无需担心他们的旧客户端软件会在云升级到新版本时出现故障。云运营商也不必担心升级云到新版本会破坏任何使用旧客户端且不期望这些变更的用户。云之间可用功能的发现
可以通过微版本发现新功能。用户客户端应首先检查微版本,并且只有在云支持时才启用新功能。这样,用户客户端就可以同时与部署了不同微版本的云进行工作。
版本发现¶
版本 API 将返回最低和最高微版本。客户端使用这些值来发现 API 支持的微版本。
对 / 的请求将获得所有端点的版本信息。响应如下所示
{
"versions": [
{
"id": "v2.0",
"links": [
{
"href": "http://openstack.example.com/v2/",
"rel": "self"
}
],
"status": "DEPRECATED",
"version": "",
"min_version": "",
"updated": "2025-07-04T12:00:00Z"
},
{
"id": "v2.1",
"links": [
{
"href": "http://openstack.example.com/v2.1/",
"rel": "self"
}
],
"status": "CURRENT",
"version": "2.14",
"min_version": "2.1",
"updated": "2013-07-23T11:33:21Z"
}
]
}
version 是最高微版本,min_version 是最低微版本。如果值为一个空字符串,则表示此端点不支持微版本;它是一个旧版 v2 API 端点——例如,上述示例中的端点 http://openstack.example.com/v2/。端点 http://openstack.example.com/v2.1/ 支持微版本;最高微版本是 2.14,最低微版本是 2.1。客户端应指定介于(包括)最低和最高微版本之间的微版本才能访问该端点。
您还可以通过对基本版本 URL 执行 GET 操作(例如,http://openstack.example.com/v2.1/)来获取特定端点的版本信息。您可以在 版本 中找到有关版本 API 的更多信息。
客户端交互¶
客户端通过使用以下 HTTP 标头来指定他们想要的 API 微版本
X-OpenStack-Nova-API-Version: 2.4
从微版本 2.27 开始,也可以使用以下标头来指定微版本
OpenStack-API-Version: compute 2.27
注意
有关此新形式的更多详细信息,请参阅 微版本规范。
这在概念上类似于“Accept”标头。从语义上讲,这意味着
如果未提供
X-OpenStack-Nova-API-Version或OpenStack-API-Version(指定compute),则表现为指定了最低支持的微版本。如果提供了两个标头,则优先使用
OpenStack-API-Version。如果提供了
X-OpenStack-Nova-API-Version或OpenStack-API-Version,则使用该微版本响应 API。如果超出支持的微版本范围,则返回 406 Not Acceptable。如果
X-OpenStack-Nova-API-Version或OpenStack-API-Version的值为latest(特殊关键字),则表现为指定了最大值。
警告
latest 值主要用于集成测试,并且不建议在客户端代码中依赖它,因为微版本不遵循语义版本控制,因此不能保证向后兼容性。客户端应始终要求特定的微版本,但限制可接受的内容为它在当时理解的微版本范围。
这意味着,开箱即用,一个不了解微版本的旧客户端可以与支持微版本的 OpenStack 安装一起工作。
在微版本早于 2.27 之前,总是会在响应中返回两个额外的标头
X-OpenStack-Nova-API-Version: microversion_number
Vary: X-OpenStack-Nova-API-Version
第一个标头指定执行 API 的微版本号。
Vary 标头用作对缓存代理的提示,表明响应也依赖于微版本,而不仅仅是主体和查询参数。有关详细信息,请参阅 RFC 2616 第 14.44 节。
从微版本 2.27 开始,将向响应中添加两个额外的标头
OpenStack-API-Version: compute microversion_number
Vary: OpenStack-API-Version