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.
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).
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:
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.
Comme Liel a déjà souligné , vous pouvez courir
swagger-codegen generate -i swagger.yaml -l swagger
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
Pour la version swagger-codegen 3.0.4
Utilisation
swagger-codegen generate -i my_yaml.yaml -l openapi
pour obtenir un .json
.