【问题标题】:How to export swagger.json (or yaml)如何导出 swagger.json(或 yaml)
【发布时间】:2018-07-09 13:58:12
【问题描述】:

如何导出 Swagger 定义文件?它应该是 JSON 或 YAML 文件,例如swagger.json 或 swagger.yaml。

假设我有一个看起来像 http://example.com//swagger/ui/index#! 的端点:

版本是api version: v1

我看不到“导出”按钮。那么如何导出呢?

【问题讨论】:

标签: swagger swagger-ui


【解决方案1】:
  1. 访问http://localhost:49846/swagger/docs/v1
  2. 以上 URL 将返回 JSON。将 JSON 保存为 swagger.json

请将端口号替换为您的端口号。

【讨论】:

    【解决方案2】:

    API 定义的 URL 显示在 Swagger UI 的顶部栏中 - 在您的示例中是

    /v2/api-docs?group=full-petstore-api
    

    所以完整的 URL 似乎是

    http://localhost:8080/v2/api-docs?group=full-petstore-api
    

    在较新版本的 Swagger UI 中,API 定义的链接通常显示在 API 标题下方,因此您可以右键单击该链接并另存为。


    如果您的 Swagger UI 没有指向 API 定义的可见链接,请查看页面源并查找 url 参数,例如:

    const ui = SwaggerUIBundle({
      url: "https://petstore.swagger.io/v2/swagger.json",     // <-------
      dom_id: '#swagger-ui',
    

    如果您没有看到 urlurl 是代码表达式,请打开浏览器开发工具,切换到 网络 标签并禁用缓存。然后刷新页面,在 HTTP 请求中搜索 API 定义文件(swagger.jsonswagger.yamlapi-docs 或类似文件)。您可以按 XHR 过滤以缩小列表范围。


    另一种查找实际 url 的方法是使用浏览器控制台并根据您的 UI 版本评估以下值之一:

    • Swagger UI 3.x:

      ui.getConfigs().url
      
    • Swagger UI 2.x:

      swaggerUi.api.url
      


    有时 OpenAPI 定义可能会嵌入到 .js 文件中——在这种情况下,获取该文件并去除多余的部分。

    【讨论】:

    • 在新的 swagger 版本(“swagger”:“2.0”)中,您在网络跟踪“v1”,“v2”而不是“swagger.json”,...右键单击并打开它在一个新选项卡中,您可以看到带有 url 的 json:https://yourapi.yourdomain.com/api/swagger/docs/v2
    • @maliness 没有“新的 Swagger 版本”,因为 Swagger 不是一个单一的工具,而是多个工具(编辑器、UI、codegen 等)的总称。也就是说,URL 取决于您的应用程序的设计方式、您使用的框架以及其他因素。 URL 不一定是/api/swagger/docs/v2,它几乎可以是任何东西。使用开发工具中的 XHR 过滤器查找 API 定义文件的链接。
    • 感谢@Helen。我们如何将此 json 发布到公共位置,让我们说一个驱动器链接或 blob 存储?
    • 你知道在swagger生成的链接中编辑JSON吗?
    • @Sattar 这取决于 API 定义是从源代码生成还是手动编写/维护。在前一种情况下,您必须编辑 API 的源代码并重新部署 API。在后一种情况下,在您选择的编辑器中编辑 API 定义文件(例如 editor.swagger.io),然后将文件重新上传到托管位置。
    【解决方案3】:

    Swashbuckel.aspnet.core(5.5.0)

    试试

    services.AddControllers()
                        .AddJsonOptions(options =>
                            options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));
    

    我在一个 Web API 核心项目中尝试过这个

    你必须使用

    System.Text.Json.Serialization;

    【讨论】:

      【解决方案4】:

      我正在使用 Django Rest Framework(所以pipdjango-rest-swagger==2.2.0),上面的答案还不够。有两种选择:

      1) 使用开发者工具查看页面源代码。当我点击我的http://localhost:8000/docs/ 端点时,我看到了:

      docs/ 端点是在 Django 中配置的,因此对您来说可能会有所不同。在深入研究细节时,我可以转到响应选项卡(在 Chrome 中)并向下滚动以找到实际的 JSON。这是window.drsSpec中的值

      2) 另一种(可能更简单)的方法是将?format=openapi 添加到我的端点,如https://github.com/marcgibbons/django-rest-swagger/issues/590 中所建议的那样

      这会直接吐出你需要的JSON。我通过将 swagger 字段更改为 openapi 将其导入 Postman,这看起来有点 hacky 但它有效??‍♂️

      【讨论】:

      • 我得到了 .json,但在将 json 导入邮递员时出错“导入时出错:格式无法识别”。任何想法如何做到这一点?
      【解决方案5】:

      JSON 也可以内联在文档中,特别是对于 Swagger 2.0 版。如果您在浏览@Helen 的答案后没有找到任何东西,请尝试一下:

      1. 查看页面源代码
      2. 搜索"swagger""spec"

      如果您看到 &lt;script type="application/json"&gt; 标记中包含类似于以下内容的内容,则这实际上是您的 swagger.json 内容。复制 &lt;script&gt; 标签内的所有内容并保存到一个名为 swagger.json 的文件中,您应该可以开始了。

      <script id="swagger-data" type="application/json">
      {"spec":{"definitions":{},"info":{},"paths":{},"schemes":[],"swagger":"2.0"}}
      </script>
      

      【讨论】:

        【解决方案6】:

        虽然它已经被回答并且它是正确的,但我想我应该发布它的更详细的版本。希望这会有所帮助,

        1. 如果您确实有提供给 swagger UI 的 swagger json 文件,那么要生成 .yaml 文件,只需单击下面的链接,将您的 json 复制粘贴到编辑器中并下载 yaml 文件。这是一种直接的方法

        链接:https://editor.swagger.io/#

        1. 现在第二种方法是您没有任何 swagger json 文件,那么以下步骤应该会有所帮助,

        打开swagger ui,检查(Shift+Ctrl+i),刷新页面,你会得到如下标签

        选择 XHRNetwork 标签下的 All 标签,检查文件 api-doc?group=* 并点击子标签 回应。 *现在复制 ap-doc?group.** 文件的内容并使用相同的编辑器链接转换为 yaml 文件

        链接:https://editor.swagger.io/#

        【讨论】:

          猜你喜欢
          • 2020-04-27
          • 1970-01-01
          • 1970-01-01
          • 2021-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多