如何合并多个 OpenAPI 规范?
How to merge multiple OpenAPI specifications?
我正在努力寻找解决方案,如何将多个 OpenApi v3 组件定义合并到一个文件中。
让我们想象一个情况:
- 您决定将 OpenApi 拆分为不同文件夹中的多个文件。 (见下图)
- 现在您需要将所有组件组合起来。v1.yaml 到一个模式中(我将其命名为
blueprint.v1.yaml
)。
通常,我使用 swagger-cli
合并所有 $ref
依赖项,但现在不是这样,因为我无法引用整个 components/schemas 对象列表
- 并使用它构建一个包含所有字段的单个 OpenApi 文件:信息、组件、路径等,使用
swagger-cli bundle
工具。
所以,问题是 - 如何在我的 blueprint.v1.yaml
文件中重用已经定义的组件块(称为组件的文件。v1.yaml)?
P.S。每个 components.v1.yaml
看起来像这样:
并且,例如,location-create-single.v1.yaml
路径定义如下图所示。请注意,所有 $ref
都引用 components.v1.yaml
个文件。
我不认为 "native" OpenAPI 可以解决您的问题。 People are discussing for a while about OpenAPI overlays/extends/merges。目前(2020-04-24)关于这个话题还没有任何共识。
虽然您可以实现自己的工具 or use an existing one 来预处理您的 blueprint.v1.yaml
并生成 "merged OAS".
go-swagger
has a mixin
合并来自多个 OpenAPI 规范的路径、定义等的命令,根据需要跳过重复定义。
我正在努力寻找解决方案,如何将多个 OpenApi v3 组件定义合并到一个文件中。
让我们想象一个情况:
- 您决定将 OpenApi 拆分为不同文件夹中的多个文件。 (见下图)
- 现在您需要将所有组件组合起来。v1.yaml 到一个模式中(我将其命名为
blueprint.v1.yaml
)。 通常,我使用swagger-cli
合并所有$ref
依赖项,但现在不是这样,因为我无法引用整个 components/schemas 对象列表 - 并使用它构建一个包含所有字段的单个 OpenApi 文件:信息、组件、路径等,使用
swagger-cli bundle
工具。
所以,问题是 - 如何在我的 blueprint.v1.yaml
文件中重用已经定义的组件块(称为组件的文件。v1.yaml)?
P.S。每个 components.v1.yaml
看起来像这样:
并且,例如,location-create-single.v1.yaml
路径定义如下图所示。请注意,所有 $ref
都引用 components.v1.yaml
个文件。
我不认为 "native" OpenAPI 可以解决您的问题。 People are discussing for a while about OpenAPI overlays/extends/merges。目前(2020-04-24)关于这个话题还没有任何共识。
虽然您可以实现自己的工具 or use an existing one 来预处理您的 blueprint.v1.yaml
并生成 "merged OAS".
go-swagger
has a mixin
合并来自多个 OpenAPI 规范的路径、定义等的命令,根据需要跳过重复定义。