如何为包含许多 Swagger 定义 .json/.yml 文件的目录 organise/build Swagger UI 接口

How to organise/build a Swagger UI interface for a directory which contains many Swagger definition .json/.yml files

我正在尝试通过 Swagger UI 记录在供应商产品 (WSO2 ESB) 中开发的现有 API 服务供公司内部使用。供应商产品不支持 swagger。我计划以编程方式 inspect/process 我的 API 服务的源代码(在供应商产品中编写)并生成 directory/folder/library .json 或 .yml 格式的 swagger 定义文件.没关系,我可以做到。

这些 api 定义文件中的每一个都可以很好地渲染 UI,我正在考虑使用 https://www.npmjs.com/package/swagger-ui.

我的问题是我最终会得到大约 100 个这样的 API 定义文件,我想提供一些总体 interface/page,其中列出了所有 API 和然后将用户带到 Swagger UI,并在用户单击其中一个链接时加载特定的 API 定义。这相当于打开我的本地 swagger-ui 并在相关 API 定义的路径中手动 typing/copying。如果我手动执行此操作,效果很好,我只是不希望用户必须手动执行此操作。他们怎么知道 API 定义 url 的存在以及为什么要手动 type/copy 将它们加入。

我看不出如何将 "apiDefintionToLoad" 参数传递给 Swagger-ui,我想我会找到一个或更改源以支持它。这个存在吗?

是否有更好的解决方案,是自己开发还是使用现有的包或解决方案?我更喜欢基于节点的解决方案,java 也可以。

我做错了吗?

谢谢, 马特

使用基本的 Swagger-ui 工具可以非常轻松地完成您正在寻找的内容。

本质上,您拥有的是许多 swagger 定义的列表。我猜想您想让用户单击一个按钮或一个 link,或者从下拉列表中选择一个定义以 select 或 API 来查看。完成后,您可以执行以下操作:

  • 让用户选择要显示的 API 定义。您可以通过将 HTML 元素添加到 index.html 并在 selecting
  • 之后触发一些 javascript 来轻松实现此目的
  • 单个 swagger-ui 容器可以重新加载和重复使用。从第一步获取 swagger 定义的 URL 并将其提供给 swagger-ui 对象,这通常是这样完成的:

    window.swaggerUi.updateSwaggerUi({url: 'http://your.spec.com/swagger.yaml'})

现在容器将重新加载您指定的规范。

Swagger UI 3.0.19 通过 urls 参数原生支持多个规范。使用 urls 时,顶部栏显示规格下拉列表而不是输入框。

用法

编辑dist\index.html并更改

url: "http://petstore.swagger.io/v2/swagger.json",

urls: [
   {name: "petstore",  url: "http://petstore.swagger.io/v2/swagger.json"},
   {name: "instagram", url: "https://api.apis.guru/v2/specs/instagram.com/1.0.0/swagger.yaml"}
],
"urls.primaryName": "petstore",  // default spec


现在你的 Swagger UI 顶栏看起来像这样: