Как экспортировать файл 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, поэтому вы можете щелкнуть правой кнопкой мыши ссылку и Сохранить как.
Если ваш пользовательский интерфейс 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, чтобы сузить список.
Хотя на него уже дан ответ, и он правильный, я подумал, что выложу более подробную версию. Надеюсь, это поможет,
- Если у вас есть файл json swagger, который вы передаете в пользовательский интерфейс swagger, то для создания файла.yaml просто нажмите на ссылку ниже, скопируйте и вставьте свой json в редактор и загрузите файл yaml. Это прямой метод
ссылка: https://editor.swagger.io/
- Теперь второй способ, где у вас нет никакого swagger json файла, тогда должны помочь следующие шаги,
Откройте пользовательский интерфейс Swagger, осмотрите (Shift+Ctrl+i), обновите страницу, и вы получите вкладки, как показано ниже
Выберите вкладку XHR или "Все" на вкладке " Сеть ", проверьте наличие файла api-doc? Group = * и щелкните ответ вложенной вкладки. * Теперь скопируйте содержимое файла ap-doc? Group. ** и используйте ту же ссылку редактора для преобразования в файл yaml
ссылка: https://editor.swagger.io/
JSON также может быть встроен в документ, особенно для Swagger версии 2.0. Если вы ничего не нашли после просмотра ответа @Helen, попробуйте:
- Просмотр исходной страницы
- Ищи
"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;
- Посетите http://localhost:49846/swagger/docs/v1.
- Приведенный выше URL-адрес вернет JSON. Сохраните JSON как swagger.json.
Пожалуйста, замените номер порта на свой номер порта.