如何将多个OpenAPI 3规范文件组合在一起?

hei*_*ent 7 api swagger openapi

我想结合使用OpenAPI 3规范编写的API规范,该规范当前分为使用相互引用的多个文件$ref。我怎样才能做到这一点?

hei*_*ent 15

一种方法是使用开源项目speccy

打开终端并speccy通过运行安装(需要Node.js):

npm install speccy -g

然后运行:

speccy resolve path/to/spec.yaml -o spec-output.yaml

  • Speccy 不再被积极维护 (17认同)
  • 13 个依赖项、13 个漏洞(7 个中等、3 个高、3 个严重) (3认同)

Hel*_*len 9

大多数 OpenAPI 工具可以使用多文件 OpenAPI 定义并$ref动态解析s。

如果您特别需要获取单个解析文件,Swagger Codegen可以执行此操作。以下是 Swagger Codegen 命令行版本的使用示例。输入文件 ( -i) 可以是本地文件或 URL。

注意:为了便于阅读,添加了换行符。

OpenAPI 3.0 示例

使用Codegen 3.x解析 OpenAPI 3.0 文件:

java -jar swagger-codegen-cli-3.0.18.jar generate
     -l openapi-yaml
     -i ./path/to/openapi.yaml
     -o ./OUT_DIR
     -DoutputFile=output.yaml
Run Code Online (Sandbox Code Playgroud)

-l openapi-yaml输出 YAML,-l openapi输出 JSON。

-DoutputFile是可选的,默认文件名是openapi.yaml/ openapi.json

OpenAPI 2.0 示例

使用Codegen 2.x解析 OpenAPI 2.0 文件 ( swagger: '2.0'):

java -jar swagger-codegen-cli-2.4.12.jar generate
     -l swagger-yaml
     -i ./path/to/openapi.yaml
     -o ./OUT_DIR
     -DoutputFile=output.yaml
Run Code Online (Sandbox Code Playgroud)

-l swagger-yaml输出 YAML,-l swagger输出 JSON。

-DoutputFile是可选的,默认文件名是swagger.yaml/ swagger.json

  • 我个人无法找到使用 codegen“组合”或“合并”多个输入定义的选项;你能举个例子吗?`-i` 开关接受单个输入 - 传递多个值的事件 (`-i def1.json -i def2.json`) 不起作用 (2认同)
  • @asceta,此问答是关于当您有一个“主”API 定义文件使用“$ref”引用外部定义时的情况。如果您的意思是您想要合并两个不同的 API 定义(具有不同的端点集、模式等),那么这是一个不同的用例,您应该[提出一个新问题](/questions/ask?tags=开放API)。 (2认同)

Rob*_*oli 7

我最近写了一个快速工具来做到这一点。我称之为 openapi-merge。有一个库和一个相关的 CLI 工具:

为了使用 CLI 工具,您只需编写一个配置文件,然后运行npx openapi-merge-cli. 配置文件相当简单,看起来像这样:

{
  "inputs": [
    {
      "inputFile": "./gateway.swagger.json"
    },
    {
      "inputFile": "./jira.swagger.json",
      "pathModification": {
        "stripStart": "/rest",
        "prepend": "/jira"
      }
    },
    {
      "inputFile": "./confluence.swagger.json",
      "disputePrefix": "Confluence",
      "pathModification": {
        "prepend": "/confluence"
      }
    }
  ], 
  "output": "./output.swagger.json"
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅NPM 包上的 README

  • 终于有人结合了多个规范,而不是“合并”`$ref`!太感谢了 (2认同)