Подтвердить что ты не робот

Преобразование файла 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, когда вы выбираете FileDownload JSON

Все это означает, что я хотел бы, чтобы пробел пробела составлял четыре пробела, например:

{
    "swagger": "2.0",
    "info": {
        "title": "API TITLE",

Я не пробовал метод Python в ссылке выше, но метод Ruby использует пробел пробела пробела. Возможно, есть способ контролировать это, но я не хочу использовать Ruby или Python в этом решении.

Я уверен, что есть много "правильных" ответов на этот вопрос. Я ищу решение, которое является самым элегантным с наименьшим количеством зависимостей. В идеале, различие полученного файла JSON с файлом JSON, созданным editor.swagger.io, должно быть пустым.

4b9b3361

Ответ 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