v2.0 在 v2.1 上的 Relax API 验证¶
https://blueprints.launchpad.net/nova/+spec/api-relax-validation
目前 v2.1 会严格验证所有 API 请求。
本文档详细说明了我们将如何放宽由 v2.1 代码库处理的 v2.0 API 请求的一些验证。请注意,发送到 /v2.1 的请求将保持其完整的严格验证。
问题描述¶
我们希望在不久的将来,所有发送到 Nova API 的请求都可以由新的 API v2.1 代码库处理。届时,我们将能够弃用,然后删除当前的 v2.0 API 实现,并返回到单一的 API 实现。
虽然所有向 v2.0 API 发送有效请求的客户端在与 v2.1 API 交互时将获得相同的结果,但仍然存在问题。各种类型的“无效”请求当前被 v2.0 接受,但会被 v2.1 拒绝。甚至 tempest 也被发现正在发送无效请求:https://review.openstack.org/#/c/138245
用例¶
我们需要确保用户部署 v2.1 以处理当前的 v2.0 请求的风险较低。
虽然对一些主要的 SDK 的初步测试表明它们似乎正在向我们的 v2.0 API 发送正确的请求,但并非所有用户都使用 SDK。
鉴于在 tempest 测试套件中发现的问题,其中无效请求被发送到 v2.0 API,必须假设编写自己的代码来访问我们 API 的用户也可能犯了类似的错误。在可能的情况下,我们希望这些用户不受从 v2.0 到 v2.1 的更改影响。
预计 SDK 将更新,以便开始为其所有 API 请求添加版本标头。届时,他们将开始获得严格 API 验证的全部好处。只有那些仍然未指定版本标头的用户才会获得较弱的验证。
项目优先级¶
API v2.1 工作的一部分。
提议的变更¶
API v2.1 验证逻辑将更改为
对 /v2.1 的请求在此更改后与今天一样工作
对 /v2 的请求将具有放宽的验证,将忽略 X-OpenStack-Nova-API-Version 标头,并始终返回 /v2 响应
即使由 v2.1 代码库提供支持,对 /v2 发出的请求也永远不会返回 X-OpenStack-Nova-API-Version 标头
如果保留 /v1.1,它将与 /v2 相同
放宽的验证包括
不再因 additionalProperties 而导致请求出错,而是当请求是针对 /v2 API 时,我们只是忽略这些 additionalProperties。
此外
当使用 v2.1 代码库来提供 /v2 请求时,任何包含 /v2.1 标头的 /v2 请求都将被忽略,因此它与 v2 代码库今天所做的一样。
有关更多详细信息,请参阅 REST API 影响。
备选方案¶
主要的替代方案是不这样做,这可能会导致 v2.1 的采用速度变慢。
我们也可以允许将 /v2 请求发送到 /v2.1,但这会使事情变得混乱,/v2 应该只是忽略版本标头。
我们可以确保任何发送到 /v2 的请求在发送 X-OpenStack-Nova-API-Version 标头时都会出错,但由于 python-novaclient 已经为所有 /v2 请求发送了该标头,因此会创建另一个向后兼容性问题。
与其仅仅忽略参数,不如在将请求传递到 v2.1 代码之前,最好也删除任何无效参数。从输入验证和安全性的角度来看,这感觉也更好,但它确实有改变 API 行为的风险。我们仍然可以在以后再考虑添加此功能,如果事实证明这是一个好主意。
数据模型影响¶
无
REST API 影响¶
这不会对 /v2.1 端点产生任何影响。
由 v2.1 代码提供支持的 /v2 端点获得放宽的验证,以使其更兼容,如上所述。
此外,由 v2.1 代码提供支持的 /v2 端点绝不应接受 /v2 不接受的任何请求,并且应仅返回 /v2 样式的响应。基本上,它应该始终忽略任何 X-OpenStack-Nova-API-Version,就像 v2 代码库今天所做的那样。
为了保持一致性,/v1.1 将与 /v2 相同
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
johnthetubaguy 和 alex_xu
工作项¶
放宽对使用 v2.1 代码库的 /v2 请求的验证,而是忽略错误的属性
即使由 v2.1 代码库提供支持,对 /v2 发出的请求也永远不会返回 X-OpenStack-Nova-API-Version 标头
确保由 v2.1 代码库提供的 /v2 忽略任何 X-OpenStack-Nova-API-Version 标头,就像 v2.0 代码库一样。
依赖项¶
无
测试¶
额外的单元测试和集成测试足以涵盖这些更改。
文档影响¶
无
参考资料¶
无