web-dev-qa-db-ja.com

コマンドラインからSwagger YAMLファイルをJSONに変換する

コマンドラインからSwagger YAMLファイルをJSONに変換したいと思います。計画では、CIジョブ中にこのコマンドラインを使用します。私はグーグルで検索し、多くの解決策を見つけましたが、それらのほとんどはPythonまたはRubyを使用しています。これは使用したくないです。たとえば: http:// www .commandlinefu.com/commands/view/12218/convert-yaml-to-json

PythonまたはRubyを使用せずにこれを行いたい。また、Swaggerの出力であるJSONと正確に一致するようにJSONをフォーマットするときに先頭の空白を制御できるようにしたい editor.swagger.io エディター、File-> Download JSONを選択した場合

つまり、次のように空白スペースを4つのスペースにしたいということです。

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

上記のリンクでPythonメソッドを試していませんが、Rubyメソッドは2つの空白スペースのパディングを使用します。おそらくそれを制御する方法があります。しかし、とにかくこのソリューションではRubyまたはPythonを使用したくありません。

この質問には多くの「正しい」答えがあると確信しています。依存関係の数が最も少なく、最もエレガントなソリューションを探しています。理想的には、 editor.swagger.io によって生成されたJSONファイルに対する結果のJSONファイルのdiffは空でなければなりません。

19
mkrufky

swagger-codegen 機能を探していると思います:

ランニング

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

同じ場所にswagger.jsonを配置します。

CIのアップデート:ビルドマシンにインストールできる場合-良い。できない場合-githubページには、nodejsサーバーを使用したdockerイメージへのリンクがあります(別の回答で提案されているcurlコマンドを使用して変換するため)。

22
Liel

yamljs を使用:

yaml2json swagger.yaml -p -i4

editor.swagger.io からのJSON出力に対してdiff'dされたこのコマンドの出力は、空のdiffを生成します。

これは確かに私が探しているものですが、大きな依存関係(ノード)をもたらします。もっと軽く、しかもこれと同じくらいエレガントなものを望んでいます。

6
mkrufky

swagger-codegen CLIインターフェイス

リエルがすでに指摘している のように、実行できます

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

Docker

Dockerを使用する場合は、 swaggerapi/swagger-codegen-cli をお試しください。

Dockerを使用してjsonファイルを生成するには、次のコマンドを使用します。

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
ckeeney

バージョンの場合swagger-codegen 3.0.4

つかいます

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

.json

5
kuzdu

これを行うには、オンライン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"

Swagger定義の値をspecオブジェクトに入れます。変換され検証された仕様をyaml形式でダウンロードするためのリンクが表示されます。

オプションについては、こちらをご覧ください。

http://generator.swagger.io/

5
fehguy

Swagger.ymlファイルをswagger.jsonに変換する別の可能性は、 swagger-cli と呼ばれるNPMパッケージです。

npm install -g swagger-cli

次に、ymlをjsonファイルに変換できます。

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