如何从Swagger UI导出Swagger JSON / YAML文件?

时间:2018-01-30 15:54:52

标签: swagger swagger-ui

如何导出Swagger定义文件(它应该是JSON或YAML文件)?我被要求这样做,而且我对Swagger只有粗略的了解。

我们的端点看起来像http://example.com//swagger/ui/index#!,看起来像这样(截图不是我们真正的端点,但我不能发布):

enter image description here

版本为api version: v1

没有"出口"我能看到的按钮。那么我该如何导出呢?

5 个答案:

答案 0 :(得分:30)

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

function downloadComplete(a) {
  return a.wellname.answer
}

所以完整的网址似乎是

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


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

Link to API definition in Swagger UI 3.x


如果您的Swagger UI没有指向API定义的可见链接,请查看页面源并查找http://localhost:8080/v2/api-docs?group=full-petstore-api 参数,例如:

url


如果您没有看到const ui = SwaggerUIBundle({ url: "https://petstore.swagger.io/v2/swagger.json", // <------- dom_id: '#swagger-ui', url是代码表达式,请打开浏览器开发工具,切换到网络标签并禁用缓存。然后刷新页面并在HTTP请求中搜索API定义文件(urlswagger.jsonswagger.yaml或类似文件)。您可以按 XHR 进行过滤,以缩小列表范围。

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

答案 1 :(得分:3)

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

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

如果您看到<script type="application/json">标签中包含与以下内容类似的内容,则实际上这是您的swagger.json内容。复制<script>标记内的所有内容,然后保存到名为swagger.json的文件中。

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

答案 2 :(得分:2)

我使用的是Django Rest Framework(所以pip软件包django-rest-swagger==2.2.0),上面的答案还不够。有两种选择:

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

enter image description here

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

中的值

enter image description here

2)另一种(也许更简单)的方法是按照https://github.com/marcgibbons/django-rest-swagger/issues/590

的建议向我的端点添加?format=openapi

这将直接吐出您需要的JSON。我通过将swagger字段更改为openapi将其导入Postman,这似乎有点hacky,但它可以正常工作??‍♂️

答案 3 :(得分:1)

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

  1. 如果确实有将swagger json文件提供给swagger UI,则要生成.yaml文件,只需单击以下链接,将json复制粘贴到编辑器中,然后下载yaml文件。这是简单明了的方法

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

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

打开招摇的用户界面,检查(Shift + Ctrl + i),刷新页面,您将获得如下所示的标签

enter image description here

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

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

答案 4 :(得分:0)

Swashbuckel.aspnet.core(5.5.0)

尝试

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

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

您必须使用

System.Text.Json.Serialization;