如何为包含许多Swagger定义.json / .yml文件的目录组织/构建Swagger UI界面

时间:2016-09-15 23:07:40

标签: node.js swagger swagger-ui swagger-2.0

我试图通过Swagger UI记录内部公司消费,以及在供应商产品(WSO2 ESB)中开发的现有API服务。供应商产品不支持招摇。我计划以编程方式检查/处理我的API服务的源代码(在供应商产品中编写),并生成.json或.yml格式的swagger定义文件的目录/文件夹/库。没关系,我可以做到。

这些api defintion文件中的每一个都会在swagger UI中很好地呈现,我正在使用https://www.npmjs.com/package/swagger-ui

我的问题是我最终会得到大约100个这些API定义文件,我想提供一些列出所有API的总体界面/页面,然后将用户带到Swagger UI,并在加载特定的API定义时加载用户单击其中一个链接。这相当于打开我的本地swagger-ui并在相关API定义的路径中手动键入/复制。如果我手动操作,这可以正常工作,我只是不希望用户必须手动执行此操作。他们如何知道API定义URL的存在以及为什么要手动输入/复制它们。

我无法看到如何将“apiDefintionToLoad”参数传递给Swagger-ui,我想我会找到一个或更改源来支持它。这是否存在?

有没有更好的解决方案,无论是自己开发还是使用现有的软件包或解决方案?我更喜欢基于节点的解决方案,java也没关系。

我是不是错了?

谢谢, 太

2 个答案:

答案 0 :(得分:3)

使用基本的Swagger-ui工具可以非常轻松地完成您所需要的工作。

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

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

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

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

答案 1 :(得分:3)

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顶栏看起来像这样:

Swagger UI top bar with spec selector