继最近发布的全新版本的 Swagger Editor 发布之后,我们很高兴地宣布它包含对 OpenAPI 3.0 中编辑和呈现体验的广泛支持。
在整个 Swagger 生态系统中,为了实现对 OpenAPI 3.1 的支持,这段时间一直很忙碌。OpenAPI 3.1 是 OpenAPI 规范的最新版本。
我们现在已经到了新编辑器支持丰富的编辑体验的阶段,包括语言特定的文档、更好的自动完成、验证、语法高亮、“跳转到”引用,以及 OpenAPI 3.0 和 3.1 的“查找符号”等功能。OpenAPI 3.1 的呈现将很快作为 Swagger UI 增强功能的一部分推出。
最新功能版本还附带了新编辑器对 AsyncAPI(2.* 版本)的开箱即用支持,在您的 Web 浏览器中提供 OpenAPI 和 AsyncAPI 的丰富编辑体验。
此外,以下是关于更广泛的 Swagger OSS 项目套件中 OpenAPI 规范 (OAS) 3.1 支持的快速更新。
Swagger Core
Swagger Core 2.2.0 版本引入了对 OpenAPI 3.1 / JSON Schema 2020/12 在表示、(反)序列化以及注释和代码优先规范解析的部分支持方面的支持。OAS 3.1 支持已添加到当前提供 OAS 3.0 支持的同一代码行中。
Swagger Core 和 Parser 的主分支,产生以下工件:
io.swagger.core.v3:swagger-core:2.2.x
io.swagger.parser.v3:swagger-parser:2.1.x
在撰写本文时,对代码优先 OAS 3.1 规范解析和注释的支持是一项正在进行的工作,3.1 当前通过从生成的 3.0 进行转换来提供。从表示的角度来看,swagger-models 提供了 OpenAPI 3.x 定义的 POJO 表示。
Swagger Parser
Swagger Parser(自然地)将 OpenAPI 规范解析为 Swagger Core 的 swagger-models 模块提供的 OpenAPI 实例。自 2.1.0 版本以来,它支持使用与 OAS 3.0 相同的 API 解析和验证 OpenAPI 3.1 规范。
它通过检查 OpenAPI 字段的值来检测版本:
SwaggerParseResult result = new
OpenAPIParser().readLocation("./path/to/openapi31.yaml", null, null);
OpenAPI = result.getOpenAPI();
返回的 OpenAPI 实例将类似于 Swagger Core 反序列化获得的实例。
自 Swagger Parser 2.1.0 版本以来,验证还支持 OAS 3.1 规范规则,当通过 OpenAPI 字段检测到 3.1 版本定义时,将应用这些规则。任何验证错误都将像 3.0 一样在 SwaggerParseResult
中提供。
在处理 OpenAPI 3.1 规范时,Swagger Parser 使用不同的逻辑来解析(options.setResolve(true)
),而不是用于 3.0 文档的逻辑。这种逻辑旨在更加一致和可维护。
有关 Swagger Core 和 Swagger Parser OpenAPI 3.1 支持的完整详细信息,请查看 GitHub wiki。
Swagger UI 和 Swagger Client
OpenAPI 3.1 的呈现将很快作为我们的 Swagger UI 增强功能的一部分推出。简而言之,通过将 ApiDOM 与 Swagger Client 集成,将能够处理和呈现 Swagger UI 中的 OpenAPI 3.1 定义/文档。
我们预计在 2023 年第一季度完成此项工作,这也将把呈现功能引入我们的 Swagger Editor 工具。
OpenAPI 3.0 和 3.1 支持概述
以下是当前 OAS 3.0 和 3.1 支持级别的概述。我们将很快跟进更详细的字段级别细分。
OAS
|
ApiDOM
|
Swagger Editor (下一步)
|
Swagger Core
|
Swagger Parser
|
OpenAPI 对象
|
✓
|
✓
|
✓
|
✓
|
信息对象
|
✓
|
✓
|
✓
|
✓
|
联系人对象
|
✓
|
✓
|
✓
|
✓
|
许可证对象
|
✓
|
✓
|
✓
|
✓
|
服务器对象
|
✓
|
✓
|
✓
|
✓
|
服务器变量对象
|
✓
|
✓
|
✓
|
✓
|
组件对象
|
✓
|
✓
|
✓
|
✓
|
路径对象
|
✓
|
✓
|
✓
|
✓
|
路径项对象
|
✓
|
✓
|
✓
|
✓
|
操作对象
|
✓
|
✓
|
✓
|
✓
|
外部文档对象
|
✓
|
✓
|
✓
|
✓
|
参数对象
|
✓
|
✓
|
✓
|
✓
|
请求体对象
|
✓
|
✓
|
✓
|
✓
|
媒体类型对象
|
✓
|
✓
|
✓
|
✓
|
编码对象
|
✓
|
✓
|
✓
|
✓
|
响应对象
|
✓
|
✓
|
✓
|
✓
|
响应对象
|
✓
|
✓
|
✓
|
✓
|
回调对象
|
✓
|
✓
|
✓
|
✓
|
示例对象
|
✓
|
✓
|
✓
|
✓
|
链接对象
|
✓
|
✓
|
✓
|
✓
|
标头对象
|
✓
|
✓
|
✓
|
✓
|
标签对象
|
✓
|
✓
|
✓
|
✓
|
引用对象
|
✓
|
✓
|
✓
|
✓
|
架构对象
|
✓(一些限制)
|
✓(一些限制)
|
✓(一些限制)
|
✓(一些限制)
|
鉴别器对象
|
✓
|
✓
|
✓
|
✓
|
XML 对象
|
✓
|
✓
|
✓
|
✓
|
安全方案对象
|
✓
|
✓
|
✓
|
✓
|
OAuth 流对象
|
✓
|
✓
|
✓
|
✓
|
OAuth 流对象
|
✓
|
✓
|
✓
|
✓
|
安全要求对象
|
✓
|
✓
|
✓
|
✓
|
规范扩展
|
✓
|
✓
|
✓
|
✓
|
后续步骤
我们致力于支持 API 社区在 API 规范和语言领域的全面发展。
在此过程中,我们将开放 Swagger 路线图并提供有关最新创新的一些更新。此外,我们希望在我们的项目中公开我们的规范支持,因此将很快显示该参考信息。
我们很乐意您参与我们在 Swagger 上的开源计划。请随时查看我们的贡献指南。