Swagger-Codegen (haskell-servant)
それ何?
Swagger-Codegen は WebAPI ドキュメントツール「Swagger」向けに書いた API ドキュメントから各言語向けに API のクライアントとサーバを自動で生成できるツールです。
今回、筆者が実装したのは haskell-servant を生成できる機能です。
ちなみにサーバを動かすだけなら Haskell の知識は全く必要ありません。
https://github.com/swagger-api/swagger-codegen
何に使うの?
- 1行もコードを書かないでモックサーバが作れます。
- haskell-servant のモデル定義を簡単に得られます。
モックサーバではなく実際に機能を持つサーバを実装することもできます。
インストール
以下がインストールされていない場合には事前に準備してください。
- Java
- Maven
ビルド
以下のコマンドで swagger-codegen をビルドします。
shell
cd swagger-codegen
git clone https://github.com/swagger-api/swagger-codegen.git
mvn package
動かしてみる
以下のコマンドで swagger ドキュメント(json) からモックサーバを生成・起動します。
shell
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \
-i http://petstore.swagger.io/v2/swagger.json \
-l haskell-servant \
-o /path/to/mock-server
cd /path/to/mock-server
stack build
stack exec server
上記の -i
オプションで独自の swagger json を指定すれば、オリジナルのモックサーバを生成することができます。
petstore であれば、例えば以下の uri でモックの出力結果を得ることができます。
http://localhost:8080/user/test
実装のポイント
- モックサーバがダミー値をランダムで自動に生成する
QuickCheck を使って値をランダムに生成している。
今後の予定
- リファクタリング
動くことを優先にしたので、十分に良い実装とは言えない。
良い修正案があれば PullRequest をください! - Swagger-codegen haskell クライアントの実装
サーバ生成をメインにしていますが、haskell-servant の効力によりクライアントも容易に作成できます。現状では自動生成できてないので、自前で実装することが必要になります。 - 未実装のオプションへの対応(エラーメッセージ、値範囲制限など)
型が強い Haskell のメリットをより活かせるように。