如何导出 swagger.json(或 yaml)

How to export swagger.json (or yaml)

提问人:sashoalm 提问时间:1/30/2018 最后编辑:Helensashoalm 更新时间:11/21/2023 访问量:218676

问:

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

假设我有一个端点,如下所示:http://example.com//swagger/ui/index#!

enter image description here

版本是 。api version: v1

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

Swagger Swagger-UI

评论

1赞 ℛɑƒæĿᴿᴹᴿ 5/18/2020
这回答了你的问题吗?为什么使用 springfox 和 Swagger2 时 v2/api-docs 是默认 URL?
2赞 sashoalm 5/19/2020
不,我认为下面公认的答案回答了我的问题。此外,标题提出了完全不同的东西。但无论如何谢谢你!

答:

178赞 Helen 1/31/2018 #1

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 标题下方,因此您可以右键单击该链接并另存为。

Link to API definition in Swagger UI 3.x


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

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

如果未看到 or if 是代码表达式,请打开浏览器开发工具,切换到“网络”选项卡并禁用缓存。然后刷新页面,在 HTTP 请求中搜索 API 定义文件(、 或类似文件)。您可以按 XHR 进行筛选以缩小列表范围。urlurlswagger.jsonswagger.yamlapi-docs

Finding the Swagger file on the Network tab of browser dev tools


查找实际值的另一种方法是使用浏览器控制台并计算以下值之一,具体取决于您的 UI 版本:url

  • Swagger UI 3.x:

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

    swaggerUi.api.url
    


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

OpenAPI definition embedded in a JavaScript file

评论

5赞 maliness 6/3/2019
在新的 swagger 版本 (“swagger”: “2.0”) 中,网络跟踪中有“v1”、“v2”,而不是“swagger.json,...右键单击并在新选项卡中打开它,您可以看到 URL 为 https:// yourapi.yourdomain.com/api/swagger/docs/v2
1赞 Helen 6/3/2019
@maliness 没有“新的 Swagger 版本”,因为 Swagger 不是一个单一的工具,而是多个工具(编辑器、UI、codegen 等)的统称。也就是说,URL 取决于您的应用程序的设计方式、您使用的框架以及其他因素。URL 不一定是,它几乎可以是任何东西。使用开发工具中的 XHR 筛选器查找指向 API 定义文件的链接。/api/swagger/docs/v2
1赞 Neel 2/4/2020
谢谢@Helen。我们如何将此 json 发布到公共位置,比如说一个驱动器链接或 blob 存储?
0赞 Sattar 2/11/2020
您知道在 Swagger 生成的链接中编辑 JSON 吗?
1赞 Bechyňák Petr 11/2/2022
对于版本 3:localhost:1000/v3/api-docs.yaml
24赞 Yashaswi N P 7/25/2019 #2

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

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

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

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

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

enter image description here

选择“网络”选项卡下的“XHR”或“全部”选项卡,检查文件 api-doc?group=*,然后单击子选项卡响应。*现在复制ap-doc?group.**文件的内容,并使用相同的编辑器链接转换为yaml文件

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

8赞 Kevinleary.net 8/8/2019 #3

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

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

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

<script id="swagger-data" type="application/json">
{"spec":{"definitions":{},"info":{},"paths":{},"schemes":[],"swagger":"2.0"}}
</script>
7赞 s g 9/13/2019 #4

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

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

enter image description here

端点是在 Django 中配置的,因此它可能因你而异。在深入研究细节时,我可以转到“响应”选项卡(在 Chrome 中)并向下滚动以查找实际的 JSON。这是docs/window.drsSpec

enter image description here

2) 另一种(也许更容易)方法是添加到我的端点,如 https://github.com/marcgibbons/django-rest-swagger/issues/590?format=openapi

这将直接吐出您需要的 JSON。我通过更改字段将其导入 Postman,这似乎有点骇人听闻,但它有效 🤷🏻 ♂️swaggeropenapi

评论

0赞 Vishvajeet Ramanuj 6/19/2021
我使用它得到了 .json,但在将 json 导入邮递员时出现错误“导入时出错:无法识别格式”。知道该怎么做吗?
0赞 Melu 8/13/2020 #5

Swashbuckel.aspnet.core(5.5.0)

尝试

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

我为Web API核心项目尝试了这个

你必须使用

System.Text.Json.序列化;

0赞 Syed Nasir Abbas 11/12/2021 #6
  1. 访问 http://localhost:49846/swagger/docs/v1
  2. 上面的 URL 将返回 JSON。将 JSON 另存为 swagger.json

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

0赞 V-Q-A NGUYEN 12/11/2022 #7

这可以在编译时使用 JUnit 测试用例来实现,请按照 https://github.com/springfox/springfox/issues/1959 了解更多详细信息。

0赞 Ernest Brayce 5/13/2023 #8

如果 url 是那么要获取 json,请让它/api/api-json

0赞 user2791560 11/21/2023 #9

我也面临这个问题。

遵循的步骤:
启用根级调试日志并分析日志消息。

o.s.w.a.OpenApiWebfluxResource:
    {GET /v3/api-docs, produces [application/json]}: openapiJson(ServerHttpRequest,String,Locale)
    {GET /v3/api-docs.yaml, produces [application/vnd.oai.openapi]}: openapiYaml(ServerHttpRequest,String,Locale)

通过查看上面的日志,通过点击 URL http://server:port/v3/api-docs.yaml 下载了 Api 规范 yaml 文件