おっさんのダベリ

IT系の技術的な話題が多いです

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メソッドの下に、statusbodyがあるだけです。 statusにはHTTPのステータスコードを記述します。上記の例だとPOSTメソッドが呼び出された場合には405であるMethod Not Allowedを返します。 HTTPメソッドが定義されていない場合には、404を返します。

上記例では、GETにはstatusが定義されていませんが、その場合には200を返します。 そしてbody以下に定義されたJSONがそのままレスポンスとして返されるようになっています。

今後はKotlinを使ったAndroidアプリも作っていこうと考えてます。そのときに使えればいいな。