TSUBOCK★LABO-ツボックラボ-

とあるセキュリティエンジニアの技術メモブログ

MENU

API BlueprintをMockで動かす。drakovが便利

f:id:panda-loves-smile:20191214004718p:plain
Drakovを使ってAPI BlueprintからMockサーバを建てる

前回の続き。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を有効活用して効率の良い試験を行いましょう。