🌐 OpenAPI → cURL 命令生成
粘贴 OpenAPI 3.x YAML / JSON 规范,一键生成所有端点的可执行 cURL 命令。
完全免费
无需注册
浏览器内完成
5 种语言
深色模式
🔒 隐私保障:
OpenAPI 规范不会上传。所有解析和转换均在浏览器内完成。
生成的 cURL 命令
📖 常见的坑
粘贴 OpenAPI 3.x 的 YAML / JSON,即可把全部端点一次性转换成可执行的 cURL 命令。解析在浏览器内完成,规格不会被上传。它所做的只是把规格文档里的描述机械地重组为命令,并不保证照着敲就能跑通——产出的质量几乎完全取决于源规格里写了多少 example。
| 情形 | 会发生什么 | 怎么处理 |
|---|---|---|
| 请求体是空的,或者只有 {} | 原因几乎总是 $ref 指向了外部文件。像 $ref: "./schemas/user.yaml#/User" 这样的引用,仅凭你粘贴的这一个文件是无法解析的,而把 schema 拆到多个文件里,对稍具规模的 API 而言是常态,所以实务中这反而是多数情况。同一文件内的 #/components/schemas/User 可以解析,但 allOf / oneOf / anyOf 的组合无法完全展开——因为 oneOf 该选哪一支,规格本身并未规定。 |
粘贴之前先把规格「打包」成单个文件——npx @redocly/cli bundle openapi.yaml -o bundled.yaml 或 npx swagger-cli bundle openapi.yaml -o bundled.json -r 会把所有外部引用内联进来。这一步本来就值得放进 CI:打包失败即意味着引用损坏,因此它同时充当了规格的断链检查。若规格大量使用 allOf,再加上 --dereferenced 彻底展开,生成的请求体会更接近实际该发送的形状。 |
| 生成的命令被 400 或 422 挡了回来 | 没有写 example 的属性,只能按类型机械地填充——字符串填 "string",数字填 0。可真实的 API 往往规定 status 只接受 "active" 或 "archived",created_at 必须是 date-time 格式,等等。因此返回 400 通常不是工具的缺陷,而是「规格里没写示例」的表现。有 enum 或 format 时可以读取,但「该值需与另一字段保持一致」这类约束在规格里根本无法表达,所以原理上就填不出来。 |
正确的修法是往规格里补 example。每补一个,Swagger UI 的示例、Mock 服务器的响应、生成客户端的测试都会一并受益。这不是为了迁就工具而做的杂活,而是 API 文档质量的直接提升。认证信息常常不写在规格里,请在本页的「认证头」栏中覆盖。返回 401 指向认证,返回 400 / 422 指向请求体,两类问题可以干净地分开——而加上 curl -v 查看实际发出的请求头,是分辨二者的最快途径。 |
| 粘贴之后一条也没生成 | 看看文档开头是不是 swagger: "2.0"。Swagger 2.0 是结构不同的另一套规格:服务器不是 servers,而是拆成 host + basePath + schemes 三项;请求体不在 requestBody,而在 parameters 里以 in: body 出现;媒体类型不在 content 下,而在顶层的 consumes。这不是「只差个版本号」,而是每一处该读的位置都变了。另一个常见原因是 YAML 缩进坏掉——混入制表符时 YAML 必定解析失败。 |
请先转换到 3.x——npx swagger2openapi swagger.yaml -o openapi.yaml 正是做这件事,现有内容几乎可以机械迁移。自 2017 年 3.0 发布以来 Swagger 2.0 一直处于维护模式,这次转换迟早都要做。要判断是不是 YAML 的问题,把它转成 JSON 再粘贴一次,立刻就能分开两种情况(YAML ⇔ JSON 转换)。JSON 能通过说明是缩进问题;JSON 也不行,那问题就出在规格版本或结构上。 |
不要把生成的命令原样交给别人。一旦覆盖了认证头,输出的每一条命令里都会以明文嵌入你真实的令牌——贴到 Slack、贴到 issue、写进文档,每一种都是凭据泄露。要分享时,请先换成环境变量,写成 -H "Authorization: Bearer $API_TOKEN"。即便只在自己机器上执行,整条命令也会以明文留在 shell 的历史文件里(在开头加一个空格,多数 shell 就不会记入历史)。还有一点:若规格的 servers 只有 /api/v1 这类相对 URL,主机就无法确定,命令原样是跑不起来的——请用本页的「基础 URL 覆盖」栏补上。
📖 使用方法
-
1
粘贴 OpenAPI 规范粘贴 YAML 或 JSON 格式的 OpenAPI 3.x 规范。点击示例加载样例。
-
2
配置选项可选覆盖基础 URL 或设置 Authorization 头。选择多行或单行输出。
-
3
复制 cURL 命令每个端点显示为卡片,可通过复制按钮发送到剪贴板。
❓ 常见问题
支持 Swagger 2.0 吗?
主要支持 OpenAPI 3.x。Swagger 2.0 的基本路径与方法可用,但 $ref 解析仅部分支持。
请求体如何填充?
优先使用 requestBody 或属性的 example / default,否则按类型生成示例值。
生成的命令可以直接执行吗?
其中包含示例值和占位令牌,运行前请替换为真实参数与凭证。
🐛 此工具出现问题了吗?
免费、无需注册。仅提供复现步骤也有帮助。报告将直接发送给运营者并用于改进。
✅
感谢您的反馈!
已送达运营者,将用于改进工具。