LoginSignup
10
8

More than 5 years have passed since last update.

swagger ドキュメントからコマンド一発でモックサーバを自動生成する (haskell-servant)

Posted at

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 のメリットをより活かせるように。
10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8