OpenAPI 2 到 3 版本转换器
指导
OpenAPI 2 到 3 版本转换器
粘贴一个 Swagger 2.0 规范,即可获得一个有效的 OpenAPI 3.0.3 版本,格式可为 JSON 或 YAML。转换器会应用官方结构映射规则——将 definitions under components/schemas合并 host, basePath,并且 schemes 进入 servers拆分 consumes 且 produces 转换为每个操作的 content 映射,并重新设计表单参数和安全定义——以确保您的规范能够与现代 OpenAPI 工具兼容。
如何使用
- 将您的 Swagger 2.0 规范粘贴到输入框中。支持 JSON 和 YAML 格式,格式将自动检测。
- 选择输出格式:保持输入格式,或强制输出为 JSON 或 YAML。
- 离开 补全缺失的必填字段 以自动填充 v3 中的必需字段,如
info.title,info.version,以及当 v2 源规范省略响应描述时补全缺失的响应描述。 - 阅读转换摘要和上方显示的任何警告,然后复制或下载生成的 OpenAPI 3.0.3 规范。
特征
- 输入为 JSON 或 YAML,输出为 JSON 或 YAML ——选择您偏好的格式,或与输入格式保持一致。
- 结构映射 —
definitions→components/schemas,securityDefinitions→components/securitySchemes,parameters/responses被移入components,并且每个$ref指针都会被重写以匹配。 - 来自 host、basePath、schemes 的服务器 ——合并为 v3 的
servers数组,当存在多个协议时优先选择 HTTPS。 - 内容协商 —
consumes且produces被转换为每个操作的requestBody.content且responses[*].content映射。 - 请求体和表单参数 —
in: body变为 v3requestBody,并且in: formData字段被归入一个multipart/form-data或application/x-www-form-urlencoded请求体模式。 - 安全流程升级 ——OAuth2
flow值被重新映射到 v3flows对象(implicit,password,clientCredentials,authorizationCode). - 补丁模式 ——当启用时,会填充缺失的必填字段,使输出通过 v3 验证器,而不是在源规范的微小缺陷上失败。
- 转换摘要和警告 ——统计转换的路径、模式和安全方案数量,以及无法一一映射的任何警告。
- 完全在浏览器中运行 ——您的规范不会离开页面。
常问问题
-
Swagger 2.0 与 OpenAPI 3.0 之间在结构上发生了哪些变化?
OpenAPI 3.0 将可重用的部分统一归入一个
components对象:definitions变为components/schemas,parameters变为components/parameters,responses变为components/responses,并且securityDefinitions变为components/securitySchemes。传输表面也发生了变化:host,basePath,并且schemes被合并为一个servers包含完整基础 URL 的数组,而隐式的consumes且produces数组被替换为每个请求体和响应上按媒体类型键值的显式content映射。 -
为何 OpenAPI 3.0 需要为请求体设计新的结构?
在 Swagger 2.0 中,请求体只是另一个带有
in: body的参数,而表单字段是带有in: formData的参数。这将两个不同的关注点(路径/查询/头部参数与请求负载)合并为一个列表,使得内容类型协商变得复杂。OpenAPI 3.0 将它们分开:参数仅用于路径、查询、头部和 Cookie;请求负载则移动到顶层的requestBodySOAP在XML之上增加了一层:每个响应都被包裹在一个content映射中。这使得您可以描述一个端点,该端点接受application/json,multipart/form-data,并且application/x-www-form-urlencoded,并为每个类型提供不同的模式。 -
Swagger 2.0 和 OpenAPI 3.0 是否在通信层面兼容?
不兼容。它们是描述格式版本,而非 API 协议版本,因此转换后的规范不会改变服务在运行时的响应方式——但工具(生成器、验证器、模拟服务器、UI 查看器)必须理解您发布的版本。OpenAPI 3.0 引入了 v2 没有等效功能的新特性,包括
oneOf/anyOf/not、回调、链接和更丰富的安全流程。因此,从 v3 到 v2 的转换通常是不可逆的,而从 v2 到 v3 的转换则主要是机械性的,因为 v2 是 v3 表达力的一个严格子集。 -
在此上下文中,“解析”是什么意思?
$ref是像A
$ref这样的 JSON 引用指针。转换必须重写每一个指针,因为目标路径发生了变化:#/definitions/User,依此类推。指针本身不会被解析(文档仍通过位置引用),但必须与结构移动同步重写,以确保生成的 v3 规范在内部一致性。#/definitions/User变成#/components/schemas/User,#/parameters/AuthHeader变成#/components/parameters/AuthHeader粘贴您的 Swagger 2.0 规范到这里(YAML 或 JSON)...
