APIのmockダミーサーバ
ユニットテストで外部のAPIを呼び出す場合などで実際にそれを呼び出しづらいことってありますよね。
また、クライアントを開発するときにサーバサイドのAPIが仕様は決まっているけどまだできていないとか困りますよね。
そういう経験が最近よくあったので、常にそれっぽいAPIのレスポンス(JSON)を返すダミーのサーバをGoで作ってみました。
https://github.com/yhanada/apimock
いままではGoのサンプルを動かす程度だったのですが、そろそろサンプル以外も作ってみようかな、と。
実行はシンプルで、Goのアプリに対してDocumentRootとなるディレクトリを指定して起動します。
$ apimock-go -root ./root
たとえば、DocumentRootで指定したroot
ディレクトリの構成が次のようになっているとします。
root ├── actions.json └── v1 └── users ├── 1 │ └── actions.json └── actions.json
レスポンスデータは各ディレクトリの下に置かれたactions.json
に記述しています。
例えば、/v1/users/1
に対するリクエストを定義しているactions.jsonの中身は次のようになります。
{ "GET": { "body": { "id": 1, "name": "Taro Yamada" } }, "POST": { "status": 405 }, "PUT": { "body": { "id": 1, "name": "Taro Takahashi" } }, "DELETE": { "body": { "result": "deleted", "id": 1 } } }
各HTTPメソッドの下に、status
とbody
があるだけです。
status
にはHTTPのステータスコードを記述します。上記の例だとPOST
メソッドが呼び出された場合には405
であるMethod Not Allowedを返します。
HTTPメソッドが定義されていない場合には、404
を返します。
上記例では、GET
にはstatus
が定義されていませんが、その場合には200
を返します。
そしてbody
以下に定義されたJSONがそのままレスポンスとして返されるようになっています。
今後はKotlinを使ったAndroidアプリも作っていこうと考えてます。そのときに使えればいいな。