Edited at

API Blueprintとapi-mockでモックサーバを作成する

More than 3 years have passed since last update.

前回:API BlueprintでWeb APIのドキュメントを生成する - Qiita


概要

ここでは、api-mockを使って記述したドキュメント通りに動くWeb APIを立ててみます。

api-mockで立ち上がるモックサーバは、実際にはデータの追加や削除等のデータに応じたレスポンスを作ることはできません。APIを1から実装する段階ではあまり恩恵がありませんが、既に他のアプリケーションとの連携ができる場合などには、疎通確認したいといったケースには便利なツールです。

また、きちんとドキュメント通りに想定するレスポンスが返ってくるので、MacOSならパイプを挟んでpbcopyすることにより、手軽にコピペできる等の使い方も考えられます。


api-mockでWeb APIドキュメントからモックサーバを立ち上げる

api-mockコマンドで先ほど作成したrecipe.apibを指定するだけでサーバが立ち上がります。

$ api-mock recipe.apib

info: Enabled Cross-Origin-Resource-Sharing (CORS)
info: Allow-Origin: *
info: Allow-Methods: GET, PUT, POST, PATCH, DELETE, TRACE, OPTIONS
info: Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization, Referer, Prefer
info: Listening on port 3000

起動したところで、curlで実際に記述したとおりのレスポンスが返ってくるかを確かめてみましょう。

$ curl http://localhost:3000/recipes/

{
"success": false,
"path": [],
"error": "show not implemented yet"
}%
$ curl http://localhost:3000/recipes/hoge
{
"error": "show not implemented yet",
"path": "/PTH/TO/XML/{name}.xml",
"success": false
}%
$ curl -X DELETE http://localhost:3000/recipes/hoge
{
"success": false,
"error": "delete not implemented yet"
}%
$ curl -X PUT http://localhost:3000/recipes/hoge
{
"success": false,
"path": "/PTH/TO/XML/{name}.xml",
"error": "save not implemented yet"
}%

これを見ると、一通り記述したとおりのレスポンスが返ってきているようです。実際に、前回の記事で使用したPython+Bottleのbottle/test2.pyを起動しておいてcurlで叩いても、同様の結果が返ってきます。

ちなみに、ルーティングが設定されていないURLにアクセスすると、以下のようなエラーが表示されます。

$ curl http://localhost:3000/recipe

Cannot GET /recipe


参考:モックサーバを手軽に作れる他のサービス

api-mockはAPI Blueprint用のモックサーバですが、他にもnpmベースのものやAWS上で作成するものなのがあるようです。