#はじめに
swaggerが話題になってしばらくたちます。
自分は仕事でも随分と便利に使っています。
swagger-editorでAPIの定義を書いていきながら実際にリクエストを飛ばして確認したり、他のエンジニアの人にAPI叩いて確認してもらうのに間違いも減ります。
postmanなどは直接swaggerファイルをインポートできるのでswaggar -> postman -> curl生成で簡易管理コマンドを作ったり。
しかし、いざ実装に使おうとすると自分の使っているwebフレームワーク向けのジェネレーターがなかったり、httpクライアントライブラリが違うものが使われていたりと自分の環境に使うには少し足りないなんてことがあると思います。
そんな人たち向けにコードジェネレーターの使い方の紹介です。
#swagger-codegen
swagger公式のjava製コードジェネレーターです。
Plaggerな実装になっていてクライアントとサーバーどちらも生成できます。
コードのテンプレートエンジンはmustacheです。
#mustache
いろんな言語に互換実装があってswagger-codegenはjmustacheをつかっています。
Mapにreposがあればreposのメンバのnameを出力して無ければ「No repos :(」を出す例
{{#repos}}{{name}}{{/repos}}
{{^repos}}No repos :({{/repos}}
#ジェネレーターテンプレートの生成
swagger-codegenはmavenのプロジェクトになっていてビルドにはmavenをインストールしておく必要があります。
まずはチェックアウトしてビルドします。
git clone https://github.com/swagger-api/swagger-codegen
cd swagger-codegen
mvn
次にジェネレーターのテンプレートを生成します。
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar meta \
-o output/myLibrary -n myClientCodegen -p com.my.company.codegen
output/myLibraryにテンプレートのmavenプロジェクトが出力されます。
DefaultCodegenクラスを継承した簡単な実装になっています。
ディレクトリ構成は以下
src
└── main
├── java
│ └── com
│ └── my
│ └── company
│ └── codegen
│ └── MyclientcodegenGenerator.java
└── resources
├── META-INF
│ └── services
│ └── io.swagger.codegen.CodegenConfig
└── myClientCodegen (テンプレートファイル)
├── api.mustache
├── model.mustache
└── myFile.mustache
定形のものはテンプレートを書き換えれば出力を変えられます。
キャメルケースをスネークケースにしたいとかはjavaで書くことになります。
試しにビルドして実行します。
なぜかテンプレートファイルが生成されていない奴があるのでそれも追加します
cd output/myLibrary
touch src/main/resources/myClientCodegen/myFile.mustache
mvn install
cd ../../
java -cp output/myLibrary/target/myClientCodegen-swagger-codegen-1.0.0.jar:modules/swagger-codegen-cli/target/swagger-codegen-cli.jar io.swagger.codegen.SwaggerCodegen generate -l myClientCodegen -i http://petstore.swagger.io/v2/swagger.json -o myClient
これでmyClientディレクトリにライブラリが生成されます。
##それでは快適なswggerライフを!