如何合并多个 OpenAPI 规范?

How to merge multiple OpenAPI specifications?

我正在努力寻找解决方案,如何将多个 OpenApi v3 组件定义合并到一个文件中。

让我们想象一个情况:

  1. 您决定将 OpenApi 拆分为不同文件夹中的多个文件。 (见下图)
  2. 现在您需要将所有组件组合起来。v1.yaml 到一个模式中(我将其命名为 blueprint.v1.yaml)。 通常,我使用 swagger-cli 合并所有 $ref 依赖项,但现在不是这样,因为我无法引用整个 components/schemas 对象列表
  3. 并使用它构建一个包含所有字段的单个 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 规范的路径、定义等的命令,根据需要跳过重复定义。