跳至主要内容

OpenAPI 3.1.0 RC0 – 发布啦!

作者: 2020年6月18日博客

时间过得真快!我们发布 OpenAPI 3.0.0 已经快三年了。在此期间,我们发布了许多补丁版本,这些版本大多是轻微的澄清和更正。然而,今天有所不同。

今天,我们宣布发布 OpenAPI 3.1.0 的第一个候选版本。

闪亮的新特性

此新版本中的三个主要变化包括

  • 一个新的顶级元素,用于描述在带外注册和管理的 Webhook。非常感谢 Lorna Mitchell 推动这项工作,使用我们新颖的 提案流程 并定期提醒我们专注于发布。
  • 支持使用标准 SPDX 标识符识别 API 许可证。
  • PathItems 对象现在是可选的,以便更轻松地创建可重用的组件库。可重用的 PathItems 可以描述在 components 对象中。还支持描述使用客户端证书保护的 API。

完美的契合

虽然这些增强功能(以及我们在 发行说明 中描述的许多其他增强功能)解决了 OpenAPI 开发者社区一些最需要的功能,但它们的光芒却被我们在 OpenAPI 3.1.0 中做出的最重要改进所掩盖。此版本的 OpenAPI 规范现在与最新 JSON Schema 草案 100% 兼容。 这项工作是 OpenAPI 开发者社区和 JSON Schema 社区成员之间共同努力的结果。特别感谢 Henry AndrewsPhil SturgeonBen Hutton 所做的所有工作、支持和提供的耐心解释。

微小的变化带来巨大差异

对于 OpenAPI 描述的常规用户来说,3.1.0 Schema 对象的差异可能并不明显。实际上,v3.0.x 描述将非常乐意通过 v3.1.0 验证。可以逐步采用新功能。最新版本的 JSON Schema 具有许多新的功能,但我们将把这些细节留到以后的博文中讨论。

当微小的变化变得重大

在 OpenAPI v3 规范中,我们采用了 语义版本控制 来传达更改的重要性。语义版本控制是一种流行的方法,它是为管理软件包而创建的。次要版本更新表示更改是向后兼容的,而主要更新则不是。当谈论规范时,向后兼容的更改意味着什么并不明显。在 v3.0.3 中,我们 引入了语言 试图精确地说明向后兼容更改的含义。我们天真地认为这会有所帮助。

在讨论与 JSON Schema 对齐的最终细节时,我们发现 readOnly 和 writeOnly 属性存在特别棘手的问题,这些属性是在 JSON Schema 中定义的,但在 OpenAPI 中被描述为具有略微不同的行为。为了实现我们与 JSON Schema 完全对齐的目标,我们不得不放弃 OpenAPI 的行为。从技术上讲,此更改可能会“破坏”某些工具。我们还没有找到它(我们仍在寻找)。语义版本控制会坚持要求此更改表示为 4.0.0。但是,此规范更新并不是如此重大的更新,而是一些小的破坏性更改。

OpenAPI 规范的 4.0.0 版本将带来一系列预期。主要版本升级通常也会面临采用阻力。此 OpenAPI 更新不是主要更新——它有一些不错的改进,并且我们现在在 JSON Schema 上有了更好的路径,但是强迫将其升级为主要版本将导致期望不符。

这个难题导致 技术指导委员会 对此问题进行投票,因为我们第一次无法达成共识。正如你可能猜到的,最终决定是放弃语义版本控制的要求。虽然关于这是否是正确做法的意见仍然不一,但这为我们提供了未来更好地使用主要和次要版本号的空间,这些版本号更准确地传达了版本更改对大多数用户的重要性。

隆重登场!

因此,OpenAPI 3.1.0 RC0 已准备好进行最终审查,这是您在它毕业之前发表评论的邀请。在解决所有最终的收尾工作后,我们将宣布 3.1.0 完成并发布!