首页 文章

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

提问于
浏览
4

我试图通过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 回答

  • 3

    您可以使用基本的Swagger-ui工具轻松完成所需的工作 .

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

    • 让用户选择要显示的API定义 . 您可以轻松地将HTML元素添加到 index.html 并在选择后触发一些javascript

    • 可以重新加载和重复使用单个swagger-ui容器 . 从第一步获取swagger定义的URL并将其提供给swagger-ui对象,通常如下所示:

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

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

  • 3

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

    Usage

    编辑 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

相关问题