前回の続き。API BlueprintでAPIリファレンスを書きましたが、せっかく作ったAPIリファレンス。そのままMockにできたら便利ですよね?できるんです。早速試してみましょう。
API BlueprintをMockとして動かすためのツールはいくつかあって、
- Drakov
- API-Mock
- API Blueprint Mock Server
- ASP.net Blueprint Mock Server
- apish
など、調べてみると上記のツールが出てきます。
中でもDrakovとAPI-Mockは結構記事書いている人も多く感じたので、API-Mockあたりを使ってみようと思ったのですが、API-Mockはnpmモジュールのバージョンがv6以降だと動かないとかなんとか読みまして(読み間違えてたら指摘ください)、自身の環境のnpmのバージョンを確認するとv9・・・こりゃ動かんということで、Drakovを試してみることにしました。
- インストール
npmパッケージなので、インストールは楽々です。
npm install -g drakov
-g
オプションでうまく行かなそうな場合は-g
オプションなしでインストールを試してみてください。
使い方
使い方は簡単で、mock 化したい API Blueprint形式のファイルを指定して実行するだけです。
drakov -f <input_file>
上記コマンドの場合はデフォルトでlocalhostのPort3000を使用してMockサーバを起動します。
他にも-p
を使用することで任意のPortに変更できたりと、オプションがあるようなのですが、それはまた別の機会に。
使ってみる
実際に使ってみたいと思います。
MockサーバにするAPI Blueprintは前回の記事のAPIに対して実行してみたいと思います。
## ユーザ情報参照 [GET /vi/user/{user_id}] ユーザ情報の参照を行えること。参照するデータはURI パラメータで指定できること。 + Parameters user_id: 1 (number, required) - ユーザ情報参照対象のユーザID + Response 200 (application/json) + Attributes (UserInfoData) + Response 404 (application/json) + Attributes (NotfoundError) + Response 500 (application/json) + Attributes (ServerError)
上記をMockサーバ化して、確認してみたいと思います。
まずはカレントに上記記述のファイル(./api_spec.md)があると仮定し、drakovを使用してMockサーバを起動します。
drakov -f ./api_spec.md
すると下記のような出力がされます。
$ @`drakov -f ./api_spec.md [INFO] No configuration files found [INFO] Loading configuration from CLI DRAKOV STARTED [LOG] Setup Route: POST /v1/user/ [LOG] Setup Route: GET /v1/user/:user_id [LOG] Setup Route: PUT /v1/user/:user_id [LOG] Setup Route: DELETE /v1/user/:user_id Drakov 1.0.4 Listening on port 3000
上記の出力で port 3000がListeningされたようなので、別ターミナルを開いてcurlコマンドで実際にGETのリソースを叩いてみます。
curl http://localhost:3000/v1/user/1 -w '%{http_code}\n'
上記コマンドのレスポンスは以下の通り。
{ `user_name`:`サンプル太郎` `gender`:`男性` `age`: 20 `blood_type`: `A` } 200
ちなみに存在しないIDを指定しても上記と同様のレスポンスが返ってきてしまいます。
存在しないリソースを指定した場合は
curl http://localhost:3000/v1/user/1/hoge -w '%{http_code}\n'
404のエラーとなるようです。
Endpoint not found 404
所感
一旦API Blueprintのリファレンス設計さえできてしまえば、drakovを使うことでMockサーバは簡単に作れるので、Mockを使用する試験はすぐに始められるかと思います。Mockを有効活用して効率の良い試験を行いましょう。