9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerでmockyを使ったスタブサーバを立ち上げる

Last updated at Posted at 2017-12-08

背景

APIを使ったシステムを作るのに接続先APIがまだない場合に、簡単にAPIのスタブサーバを立ち上げたい。
mockyという便利なものを使わせていただく。

mockyとは

Node.jsベースでできたモックサーバ。

okv/mocky : https://github.com/okv/mocky

環境

Mac
Docker
docker-compose

説明しないこと

Dockerやdocker-composeのインストールや操作方法
Node.js の使い方

やりたいこと

特定のURLにアクセスされたら、特定のjsonデータを出力させる。
jsonデータは、ファイルで用意してそれを読み込んで出力させる。
リクエストデータもjson形式で、POSTで受ける。

手順

構成


current
 |
 +- docker-compose.yml
 |
 +- mocky
 |    |
 |    +- Dockerfile
 |
 +- stub
 |    |
 |    +- mocky.js
 |    +- user-100.json
 |    +- user-101.json
 |    +- user-102.json
 |    +- user-list.json

mockyのコンテナimageを定義する

Dockerfile

FROM node:latest

RUN npm install mocky

今回はこれを docker-composeから実行して作るが、これだけ動かしてもOK

mockyを扱いやすいように docker-composeで起動方法を定義する

docker-compose.yml

version: '2.2'

services:
  mocksan:
    build: ./mocky
    container_name: mocksan
    volumes:
      - "./stub:/node"
    ports:
      - "3000:3000"
    entrypoint: node /node/mocky.js


モックしたいURLを定義する

mocky.js

var mocky = require('mocky');
var fs = require('fs');

mocky.createServer([
{
    // ユーザ情報
    url: '/api/v01/user/get',
    method: 'post',
    res: function(req, res, callback) {
        var params = JSON.parse(req.body); // 受け取ったjsonデータを参照する場合
        var f = '/node/user-' + params.userid + '.json';  // パラメタ別のjsonファイル
        fs.readFile(f, 'utf8', function(err, text) {
            callback(null, {
                status: 200,
                body: text
            });
        });
    }
},
  {
    // ユーザリスト
    url: '/api/v01/user/list',
    method: 'post',
    res: function(req, res, callback) {
      fs.readFile('/node/user-list.json', 'utf8', function(err, text) {
        callback(null, {
          status: 200,
          body: text
        });
      });
    }
  }
  
]).listen(3000);

起動

$ docker-compose up -d

テスト

ホストマシンからは、localhost でアクセスできる。
別のDockerコンテナ内からの場合は、mocksan でアクセスできる。

curlコマンドで動かしてみる。

$ curl -X POST http://localhost:3000/api/v01/user/get -d '{"userid":"100"}'

{
    "userid": "100",
    "username": "hanako-san"
}

ログ

docker のログ出力機能でmockyへのアクセスを見ることができる。
console.log などで出力した場合もここに出る。

$ docker logs mocksan -f

[mocksrv] [req 0] [Thu, 07 Dec 2017 06:21:30 GMT] method: POST url: /api/v01/user/list req.body: {"userid":"100"}
[mocksrv] [req 1] [Thu, 07 Dec 2017 06:21:40 GMT] method: POST url: /api/v01/user/list req.body: {"userid":"101"}
[mocksrv] [req 2] [Thu, 07 Dec 2017 06:24:49 GMT] method: POST url: /api/v01/user/list req.body: {"userid":"102"}
[mocksrv] [req 3] [Thu, 07 Dec 2017 06:24:49 GMT] method: POST url: /api/v01/user/list req.body: {"userid":"103"}

注意

mocky.js を変更した場合は、nodeまたは、コンテナの再起動が必要。

感想

とても便利。

9
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
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?