Преобразование файла YAML Swagger в JSON из командной строки
Я хотел бы преобразовать файл Swagger YAML
в JSON
из командной строки. План состоит в том, чтобы использовать эту командную строку во время задания CI. Я искал google и нашел много решений, но большинство из них использует Python или Ruby, которые я бы предпочел не использовать. Например: http://www.commandlinefu.com/commands/view/12218/convert-yaml-to-json
Я хотел бы сделать это, не используя Python или Ruby, и
Я также хотел бы иметь возможность управлять ведущими пробелами при форматировании JSON, чтобы точно соответствовать JSON, который выводится из редактора Swagger editor.swagger.io, когда вы выбираете File
→ Download JSON
Все это означает, что я хотел бы, чтобы пробел пробела составлял четыре пробела, например:
{
"swagger": "2.0",
"info": {
"title": "API TITLE",
Я не пробовал метод Python в ссылке выше, но метод Ruby использует пробел пробела пробела. Возможно, есть способ контролировать это, но я не хочу использовать Ruby или Python в этом решении.
Я уверен, что есть много "правильных" ответов на этот вопрос. Я ищу решение, которое является самым элегантным с наименьшим количеством зависимостей. В идеале, различие полученного файла JSON с файлом JSON, созданным editor.swagger.io, должно быть пустым.
Ответы
Ответ 1
Я думаю, что вы ищете функциональность swagger-codegen:
Запуск
swagger-codegen generate -i swagger.yaml -l swagger
выйдет из swagger.json в том же месте.
Обновление для CI:
Если вы можете установить его на свою машину для сборки - хорошо для вас.
Если вы не можете - страница github имеет ссылку на изображение докера с сервером nodejs (для преобразования с помощью команды curl, как предложено в другом ответе).
Ответ 2
Использование yamljs:
yaml2json swagger.yaml -p -i4
Вывод этой команды diff'd против вывода JSON из editor.swagger.io создает пустой diff.
Это действительно то, что я ищу, но это вносит огромную зависимость (узел). Я надеюсь на что-то более легкое, но в то же время столь же элегантное, как и это.
Ответ 3
Для этого вы можете воспользоваться онлайн-проектом Swagger Codegen:
curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d "{
\"spec\": {}
}" "https://generator.swagger.io/api/gen/clients/swagger-yaml"
Поместите значение вашего чванства в объект spec
. Вы получите ссылку для загрузки преобразованного & проверенная спецификация в формате yaml.
Для вариантов, посмотрите здесь:
http://generator.swagger.io/
Ответ 4
Интерфейс swagger-codegen cli
Как Лиэль уже указала, вы можете запустить
swagger-codegen generate -i swagger.yaml -l swagger
Docker
Если вы используете Docker, я советую вам попробовать swaggerapi/swagger-codegen-cli.
Вы можете сгенерировать файл json, используя docker, с помощью следующей команды:
docker run -v ./docs:/docs swaggerapi/swagger-codegen-cli generate -i /docs/swagger.yaml -l swagger -o /docs
Мне нравится настраивать docker-compose.yml
для "псевдонима" этой команды для легкого повторного использования:
version: "2"
services:
gen-swagger:
volumes:
- ./docs:/docs
image: swaggerapi/swagger-codegen-cli
command: generate -i /docs/swagger.yaml -l swagger -o /docs
И теперь я могу просто бежать docker-compose run gen-swagger
Ответ 5
Для версии swagger-codegen 3.0.4
Используйте
swagger-codegen generate -i my_yaml.yaml -l openapi
чтобы получить .json
.
Ответ 6
Еще одна возможность преобразовать файл swagger.yml в swagger.json - это пакет NPM под названием swagger-cli.
npm install -g swagger-cli
Затем вы можете преобразовать файл yml в json:
swagger-cli bundle -o api-spec.json api-spec.yml