web-dev-qa-db-de.com

Konvertieren einer Swagger-YAML-Datei in JSON von der Befehlszeile aus

Ich möchte eine Swagger YAML-Datei von der Befehlszeile in JSON konvertieren. Es ist geplant, diese Befehlszeile während eines CI-Jobs zu verwenden. Ich habe bei Google gesucht und viele Lösungen gefunden, aber die meisten verwenden Python oder Ruby, die ich lieber nicht verwenden würde. Zum Beispiel: http://www.commandlinefu.com/commands/view/12218/convert-yaml-to-json

Ich möchte dies ohne Python oder Ruby tun, und Ich möchte auch den führenden Leerraum beim Formatieren der JSON so steuern, dass er genau mit der JSON übereinstimmt, die von Swaggers editor.swagger ausgegeben wird. io editor, wenn Sie File -> Download JSON wählen

Das bedeutet nur, dass ich das Leerzeichen mit vier Leerzeichen füllen möchte:

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

Ich habe die Python-Methode in dem Link oben nicht ausprobiert, aber die Ruby-Methode verwendet zwei Leerzeichen. Vielleicht gibt es eine Möglichkeit, das zu steuern, aber ich möchte sowieso nicht Ruby oder Python in dieser Lösung verwenden.

Ich bin sicher, dass es viele "richtige" Antworten auf diese Frage gibt. Ich suche nach der Lösung, die am elegantesten ist und nur wenige Abhängigkeiten aufweist. Idealerweise sollte ein Vergleich der resultierenden JSON-Datei mit einer JSON-Datei, die von editor.swagger.io generiert wurde, leer sein.

17
mkrufky

Ich denke, dass Sie nach der swagger-codegen Funktionalität suchen:

Laufen

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

wird einen Swagger.json an derselben Stelle ablegen.

Update Für CI: Wenn Sie es auf Ihrem Build-Rechner installieren können - gut für Sie ..__ Wenn dies nicht möglich ist - Die Github-Seite enthält einen Link zu einem Docker-Image mit einem Node-Server (zum Konvertieren mit einem Curl-Befehl, wie in einer anderen Antwort vorgeschlagen).

21
Liel

Sie können dazu das Online-Swagger-Codegen-Projekt verwenden:

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

Geben Sie den Wert Ihrer Swagger-Definition in das spec-Objekt ein. Sie erhalten einen Link zum Herunterladen der konvertierten und validierten Spezifikation im Yaml-Format.

Optionen finden Sie hier:

http://generator.swagger.io/

5
fehguy

yamljs verwenden:

yaml2json swagger.yaml -p -i4

Die Ausgabe dieses Befehls wird mit der JSON-Ausgabe von editor.swagger.io verglichen und erzeugt einen leeren Unterschied.

Dies ist in der Tat das, was ich suche, aber es bringt eine große Abhängigkeit (Knoten) mit sich. Ich hoffe auf etwas noch Leichteres, aber ebenso elegant wie dieses.

4
mkrufky

swagger-Codegen-CLI-Schnittstelle

Wie Liel bereits auf hingewiesen hat, können Sie laufen

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

Docker

Wenn Sie Docker verwenden, sollten Sie swaggerapi/swagger-codegen-cli versuchen.

Sie können eine Json-Datei mithilfe des Dockers mit dem folgenden Befehl generieren:

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

Ich möchte einen docker-compose.yml zum "Alias" dieses Befehls zur einfachen Wiederverwendung einrichten:

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

Und jetzt kann ich einfach docker-compose run gen-swagger ausführen

4
ckeeney

Eine andere Möglichkeit, eine swagger.yaml-Datei in swagger.json zu konvertieren, ist ein NPM-Paket mit dem Namen swagger-cli .

npm install -g swagger-cli

Dann können Sie eine yaml in json-Datei konvertieren:

swagger-cli bundle -o api-spec.json api-spec.yml
1
Sebastian

Für version swagger-codegen 3.0.4  

Benutzen 

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

einen .json bekommen.

0
kuzdu