3
4

More than 5 years have passed since last update.

NginxとDockerfileでAPIのスタブを作成する

Posted at

スタブとは

プログラムのモジュールをテストする際、そのモジュールが呼び出す下位モジュールの代わりに用いる代用品のことです。下位モジュールが未完成でも代わりにスタブを用いることでテストが可能になります。よくモックと間違えられることがありますが、モックとは別物です。

本記事では、外部のAPIを利用するシステムを構築する際に、そのAPIをNginxとDockerfileを利用して簡単にスタブ化する方法を紹介します。なお、APIのURLの例として以下2通りを利用します。

  • /api/v1/users/
  • /api/v1/companys/

スタブファイルの作成

「/api/v1/users/」というURLで以下のようなレスポンスを返却するAPIのスタブファイルを作成します。

users.json
[
    {
        "id":"1",
        "first_name":"Test",
        "last_name":"Ichiro"
    },
    {
        "id":"2",
        "first_name":"Test",
        "last_name":"Jiro"
    }
]

次に「/api/v1/companys/」というURLで以下のようなレスポンスを返却するAPIのスタブファイルも作成します。

companys.json
[
    {
        "id":"1",
        "name":"Company1"
    },
    {
        "id":"2",
        "first_name":"Company2"
    }
]

Nginxのdefault.confの作成

DockerのNginx公式イメージで作成するのでdefault.confになります。設定は以下の通りです。

default.conf
server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    # ユーザー情報取得API
    location /api/v1/users/ {
        root   /usr/share/nginx/json;
        index  users.json;
    }

    # 企業情報取得API
    location /api/v1/companys/ {
        root   /usr/share/nginx/json;
        index  companys.json;
    }
}

冒頭で紹介した、2つのURLのlocationを記載します。設定の詳細は「Nginxの静的コンテンツの提供」を参照ください。

Dockerfileの作成

Dockerfileを以下の通り作成します。

FROM nginx:latest

ADD ./conf.d/default.conf /etc/nginx/conf.d
ADD ./json /usr/share/nginx/json/

作成した各ファイルのディレクトリ構成

ここまでで作成したファイルのディレクトリ構成は以下の通りにします。

├─api-stub  ※作業ディレクトリ
│  │  Dockerfile
│  │
│  ├─conf.d
│  │      default.conf
│  │
│  └─json
│      └─api
│          └─v1
│              ├─companys
│              │      companys.json
│              │
│              └─users
│                      users.json

Dockerイメージの作成

docker build -t api-stub-image .

作成したイメージからコンテナの作成・起動

docker run --name api-stub -d -p 8080:80 api-stub-image

これで、スタブが出来上がりました。

動作確認

以下のように、各APIで作成したスタブファイルが返却されれば成功です。
※1行目と2行目は、Chrome拡張のJSON Viewerが付けてるメタ情報だと思うので無視してください。
aaaaa.PNG
c.PNG

以上です。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4