web-dev-qa-db-fra.com

Conversion d'un fichier Swagger YAML en JSON à partir de la ligne de commande

J'aimerais convertir un fichier YAML de Swagger en JSON à partir de la ligne de commande. Le plan consiste à utiliser cette ligne de commande pendant un travail de CI. J'ai cherché sur Google et trouvé de nombreuses solutions, mais la plupart d'entre elles utilisent Python ou Ruby, ce que je préférerais ne pas utiliser. Par exemple: http://www.commandlinefu.com/commands/view/12218/convert-yaml-to-json

J'aimerais pouvoir le faire sans utiliser Python ou Ruby, et .__ J'aimerais également pouvoir contrôler les espaces blancs principaux lors du formatage du JSON afin qu'il corresponde exactement au JSON produit par editor.swagger de Swagger. io éditeur lorsque vous choisissez File -> Download JSON

Tout ce que cela signifie, c'est que j'aimerais que le remplissage d'espaces soit de quatre espaces, comme suit:

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

Je n'ai pas essayé la méthode Python dans le lien ci-dessus, mais la méthode Ruby utilise deux marges d'espacement. Peut-être y at-il un moyen de contrôler cela, mais je ne veux pas utiliser Ruby ou Python dans cette solution.

Je suis sûr qu'il y a beaucoup de réponses "correctes" à cette question. Je recherche la solution la plus élégante avec le moins de dépendances possible. Idéalement, un diff du fichier JSON résultant par rapport à un fichier JSON généré par le fichier editor.swagger.io devrait être vide.

17
mkrufky

Je pense que vous recherchez la fonctionnalité swagger-codegen :

Fonctionnement

swagger-codegen generate -i swagger.yaml -l swagger

mettra un swagger.json au même endroit.

Update For CI: Si vous pouvez l'installer sur votre machine de compilation - bon pour vous . Si vous ne le pouvez pas - la page github contient un lien vers une image de menu fixe avec un serveur nodejs (pour convertir en utilisant une commande curl comme suggéré dans une réponse différente).

21
Liel

Vous pouvez utiliser le projet en ligne swagger codegen pour cela:

curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d "{
  \"spec\": {}
}" "https://generator.swagger.io/api/gen/clients/swagger-yaml"

Placez la valeur de votre définition swagger dans l'objet spec. Vous obtiendrez un lien pour télécharger la spécification convertie et validée, au format yaml.

Pour les options, regardez ici:

http://generator.swagger.io/

5
fehguy

Utiliser yamljs :

yaml2json swagger.yaml -p -i4

La sortie de cette commande diffère de la sortie JSON de editor.swagger.io produit un diff vide.

C’est effectivement ce que je recherche, mais cela entraîne une énorme dépendance (noeud). J'espère quelque chose d'encore plus léger, mais tout aussi élégant.

4
mkrufky

interface clag swagger-codegen

Comme Liel a déjà souligné , vous pouvez courir

swagger-codegen generate -i swagger.yaml -l swagger

Docker

Si vous utilisez Docker, je vous suggère d'essayer swaggerapi/swagger-codegen-cli .

Vous pouvez générer un fichier json à l'aide de docker à l'aide de la commande suivante:

docker run -v ./docs:/docs swaggerapi/swagger-codegen-cli generate -i /docs/swagger.yaml -l swagger -o /docs

J'aime configurer un docker-compose.yml pour "alias" cette commande pour une réutilisation facile:

version: "2"
services:
  gen-swagger:
    volumes:
      - ./docs:/docs
    image: swaggerapi/swagger-codegen-cli
    command: generate -i /docs/swagger.yaml -l swagger -o /docs

Et maintenant je peux juste lancer docker-compose run gen-swagger

4
ckeeney

Pour la version swagger-codegen 3.0.4  

Utilisation 

swagger-codegen generate -i my_yaml.yaml -l openapi 

pour obtenir un .json.

0
kuzdu