Как экспортировать файл Swagger JSON/YAML из интерфейса Swagger?

Как я могу экспортировать файл определения Swagger (это должен быть файл JSON или YAML)? Меня просят об этом, и у меня есть только поверхностные знания о Swagger.

У нас есть конечная точка выглядит http://example.com//swagger/ui/index#! это выглядит так (скриншот не является нашей реальной конечной точкой, хотя я не могу опубликовать это):

введите описание изображения здесь

Версия api version: v1,

Нет кнопки "Экспорт", которую я вижу. Так как мне его экспортировать?

10 ответов

Решение

URL-адрес определения API отображается в верхней панели Swagger UI - в вашем примере это

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

Таким образом, полный URL, кажется,

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


В более новых версиях Swagger UI ссылка на определение API часто отображается под заголовком API, поэтому вы можете щелкнуть правой кнопкой мыши ссылку и Сохранить как.

Ссылка на определение API в Swagger UI 3.x


Если ваш пользовательский интерфейс Swagger не имеет видимой ссылки на определение API, просмотрите источник страницы и найдите url параметр, такой как:

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


Если вы не видите url или если url является выражением кода, откройте инструменты разработчика браузера, переключитесь на вкладку Сеть и отключите кеширование. Затем обновите страницу и найдите файл определения API (swagger.json, swagger.yaml, api-docs или аналогичный) среди запросов HTTP. Вы можете фильтровать по XHR, чтобы сузить список.

Поиск файла Swagger на вкладке Сеть инструментов разработчика браузера

Хотя на него уже дан ответ, и он правильный, я подумал, что выложу более подробную версию. Надеюсь, это поможет,

  1. Если у вас есть файл json swagger, который вы передаете в пользовательский интерфейс swagger, то для создания файла.yaml просто нажмите на ссылку ниже, скопируйте и вставьте свой json в редактор и загрузите файл yaml. Это прямой метод

ссылка: https://editor.swagger.io/

  1. Теперь второй способ, где у вас нет никакого swagger json файла, тогда должны помочь следующие шаги,

Откройте пользовательский интерфейс Swagger, осмотрите (Shift+Ctrl+i), обновите страницу, и вы получите вкладки, как показано ниже

Выберите вкладку XHR или "Все" на вкладке " Сеть ", проверьте наличие файла api-doc? Group = * и щелкните ответ вложенной вкладки. * Теперь скопируйте содержимое файла ap-doc? Group. ** и используйте ту же ссылку редактора для преобразования в файл yaml

ссылка: https://editor.swagger.io/

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>

Я использую Django Rest Framework (поэтому pip пакет django-rest-swagger==2.2.0), и приведенных выше ответов было недостаточно. Было два варианта:

1) Просмотрите исходный код страницы с помощью инструментов разработчика. Когда я ударил свойhttp://localhost:8000/docs/ конечная точка, я вижу:

В docs/конечная точка была настроена в Django, поэтому для вас она может быть другой. Вникнув в подробности, я могу перейти на вкладку Response (в Chrome) и прокрутить вниз, чтобы найти фактический JSON. Это ценность вwindow.drsSpec

2) Альтернативный (и, возможно, более простой) подход - добавить ?format=openapiк моей конечной точке, как предлагается в https://github.com/marcgibbons/django-rest-swagger/issues/590

Это будет напрямую выдавать нужный вам JSON. Я импортировал его в Postman, изменивswagger поле для openapi что кажется немного взломанным, но это сработало ‍♂️

Я также столкнулся с этой проблемой.

Дальнейшие действия:
Включили журналы отладки корневого уровня и проанализировали сообщения журнала.

      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)

Судя по приведенному выше журналу, файл yaml спецификации API был загружен по URL-адресу http://server:port/v3/api-docs.yaml.

Если URL-адрес/apiзатем, чтобы получить JSON, сделай это/api-json

Как указано выше: в новых версиях пользовательского интерфейса Swagger ссылка на определение API часто отображается под заголовком API, поэтому вы можете щелкнуть по нему, скопировать весь текст и сохранить его как файл Json в своей системе, а затем импортировать API Определение в готовом API.

Это может быть достигнуто с помощью тестового примера JUnit во время компиляции, следуйте https://github.com/springfox/springfox/issues/1959 для получения более подробной информации.

За

Swashbuckel.aspnet.core(5.5.0)

пытаться

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

Я пробовал это для основного проекта веб-API

ты должен использовать

System.Text.Json.Serialization;

  1. Посетите http://localhost:49846/swagger/docs/v1.
  2. Приведенный выше URL-адрес вернет JSON. Сохраните JSON как swagger.json.

Пожалуйста, замените номер порта на свой номер порта.

Другие вопросы по тегам