Dockerとnode-easymockでモックAPIサーバを作る

ローカル開発環境でミドルウェアを動かすためにDockerを使っているのですが、チーム外で開発しているAPIのモックが欲しくなることがあります。様々な手段が考えられますが、今回は固定のJSONを返すだけのシンプルなモックサーバでよいという要件だったので、サイバーエージェントさんのnode-easymockというものを使ってみました。

github.com

これはNode.jsで実装されたモックサーバで、特にプログラムを書かずともレスポンスとして返したいファイルをパス階層に応じたディレクトリに配置しておくだけでそのファイルの内容を返すAPIを提供してくれるというものです。

ファイルの内容は完全固定だけでなく、リクエストで受け取った内容を組み込むなど簡単なテンプレーティングが可能です。また、別途設定ファイルを作成することでより複雑なルーティングや、レスポンスにディレイをかけたりといったこともできます。

これをDockerコンテナに組み込んでみます。Dockerfileは以下のような感じになります。

FROM node:0.12

RUN npm install -g easymock

RUN mkdir /var/easymock
WORKDIR /var/easymock
COPY json /var/easymock

EXPOSE 3000

ENTRYPOINT ["easymock"]

FROMnode:0.12を指定しているのがポイントで、依存モジュールが古いのかnode:latestを使うとeasymockのインストールに失敗してしまいます。

モックAPIが返す内容はDockerfileと同じ場所にjson/というディレクトリを掘ってJSONファイルなどを配置しておきます。たとえば以下のような配置になっていたとします。

+-Dockerfile
+-json/
   +-user/
      +-1_get.json

そうするとビルドされたコンテナはhttp://192.168.99.100:3000/user/1に対するGETリクエストの結果として配置したJSONファイルの内容を返してくれます。

このようにnode-easymockを使うとプログラミングレスでモックAPIサーバを作ることができ、Dockerコンテナにも簡単に組み込むことができます。今回のようなちょっとした用途であれば非常に便利なツールです。