Nova 稳定 REST API

本文档描述了 Nova REST API 的当前状态——截至 Pike 版本——并尝试描述 Nova 团队如何随着时间的推移演进 REST API 的实现,并删除了多年来逐渐积累的一些冗余内容。

背景

Nova 过去包含两个不同的框架来暴露 REST API 功能。较旧的代码称为“v2 API”,存在于 /nova/api/openstack/compute/legacy_v2/ 目录中。这个代码树在 Newton 版本期间(14.0.0 及更高版本)被完全删除。较新的代码称为“v2.1 API”,存在于 /nova/api/openstack/compute 目录中。

v2 API 是旧的 Nova REST API。它主要被 v2.1 API 替代。

v2.1 API 是新的 Nova REST API,具有一组改进,包括 微版本 (Microversion) 和使用 JSON-Schema 进行标准化的输入验证。此外,v2.1 API 完全向后兼容 v2 API(这就是我们将其称为 v2.1 API 的原因)。

当前稳定 API

  • Nova v2.1 API + 微版本 (v2.1 API 向后兼容 v2 API,但验证更严格)

  • /v2 & /v2.1 端点支持

  • v2 兼容模式,用于旧的 v2 用户

Nova REST API 的演进

../_images/evolution-of-api.png

Nova v2 API + 扩展

Nova 过去有 v2 API。在 v2 API 中,有一个称为“扩展”的概念。操作员可以使用它来根据需求启用/禁用 Nova REST API 的一部分。最终用户可以查询“/extensions” API 来发现 Nova 部署支持哪些 API 功能

不幸的是,由于 v2 API 扩展可以从一个部署启用或禁用到另一个部署,以及自定义 API 扩展可以添加到某个部署而另一个部署没有,因此最终用户无法知道 OpenStack Compute API 实际包含什么。没有两个 OpenStack 部署是完全一致的,这使得云互操作性成为不可能。

在 Newton 版本中,API 扩展插件的 stevedore 加载已被弃用并标记为删除。

在 Newton 版本中,v2 API 代码库已被删除,/v2 端点被重定向到 v2.1 代码库。

基于 v2.1 API 的 v2 API 兼容模式

v2.1 API 除了使用 JSON Schema 进行严格的输入验证,没有允许额外的请求参数,以及微版本功能外,与 v2 API 完全相同。自 Newton 以来,“/v2”端点也开始使用 v2.1 API 实现。但是,为了保持 v2 API 的向后兼容性,“/v2”端点不应在额外的请求参数或任何新的 Microversion 标头时返回错误。v2 API 必须与它一直以来的方式相同。

为了实现这种行为,引入了遗留 v2 兼容模式。v2 兼容模式基于 v2.1 实现,区别如下

  • 跳过请求体中的 additionalProperties 检查

  • 忽略请求中的 Microversion 标头

  • 响应中没有 Microversion 标头

Nova v2.1 API + 微版本

在 Kilo 版本中,nova v2.1 API 已发布。v2.1 API 应该与 v2 API 向后兼容,并使用 JSON Schema 进行严格的输入验证。

v2.1 API 带来了微版本概念,这是一种版本化 API 更改的方式。API 中的每个新功能或修改都必须通过微版本更新来完成。

API 扩展概念已从 v2.1 API 中弃用,不再需要演进 REST API,并且不应使用 API 扩展类来实现新功能。相反,应通过微版本概念添加新功能,并使用微版本装饰器来添加或更改 REST API。

v2.1 API 有一个插件框架,该框架使用 stevedore 加载 Nova REST API 扩展,而不是旧的 V2 手工扩展加载机制。有人认为插件框架支持 Nova API 的可扩展性,允许部署者发布自定义 API 资源。

在 Newton 版本中,黑名单和白名单扩展的配置选项以及 stevedore 相关内容已被弃用并标记为删除。

在 Pike 中,基于 stevedore 的插件框架已被删除,URL 映射是通过纯路由列表完成的。不再有动态检测 API 实现的魔术。有关更多信息,请参阅 扩展 API

“/extensions” API 通过 GET 方法向用户公开了已启用的 API 函数列表。但是,如上所述,不应将新的 API 扩展添加到此 API 的列表中。“/extensions” API 在 Nova V2.1 API 中已冻结,并且 已弃用

现在成为历史的东西

截至 Pike 版本,许多已弃用的内容已被删除,并在 Nova API 世界中成为历史

  • v2 遗留框架

  • API 扩展概念

  • stevedore 魔术来动态加载扩展/插件

  • 可配置的方式来启用/禁用 API 扩展