LoginSignup
7
6

More than 3 years have passed since last update.

[mocky] スタブREST-APIサーバを構築する

Last updated at Posted at 2019-05-14

Node.jsパッケージ「mocky」を使用して、スタブREST-APIを構築します。

mocky
https://www.npmjs.com/package/mocky

今回使用したNode.jsパッケージのバージョンは下記の通りです。

Node.jsパッケージ
fs: 0.0.1
mocky: 0.1.11
querystring: 0.2.0
url: 0.11.0

スタブREST-APIサーバとは

WEBサービス開発で、クライアントサイドとサーバーサイドの開発が同時並行することが多いです。クライアントサイドは、サーバーサイドがある前提で動作することになりますが、完成を待ってから開発に取り掛かるのでは時間がありません。そのときに活躍するのがスタブ(ダミー)として動作するサーバーとなります。

mockeyとは

mockeyとは、簡単にスタブREST-API環境を構築することができるNode.jsパッケージです。

以前、node-easymockを使用してスタブREST-APIサーバを構築していました。node-easymockはJSONファイルを作成するだけで構築することができます。とても簡単なのですが、特定のリクエストに対して異なるレスポンスを返すというような痒い所に手が届くことができません。

mockeyでnode-easymockと同じようにJSONファイル作成するだけで構築できるようにして、特定のリクエストにも対応できるように実装しました。

ソースコードは下記の場所にあります。
ソースファイルはこちら

仕様

  1. response/user/GET.jsonのようにJSONファイルを格納するとGET http://localhost:8888/user/のRESTリクエストに対応したレスポンスを返します。POST、PUT、DELETEも同様です。
  2. 特定のリクエストをカスタマイズする場合は、mock_server.jsを修正します。

インストール

まず、Node.js をインストールしてください。次に、package.jsonがあるフォルダに移動して、下記のコマンドを実行してください。

サーバーをインストールする
$ npm install
サーバーを起動する
$ node mock_server.js

実装

mock_server.jsの実装について説明します。mockyのcreateServerで初期化します。共通処理は、doRes関数に実装しています。

createServer
mocky.createServer([{
  url: new RegExp('\\/' + priv.getRegExpOrStrings(CONST.PATH.APIS) + '\\/*'),
  method: 'options',
  res: priv.doRes
}, {
  url: new RegExp('\\/' + priv.getRegExpOrStrings(CONST.PATH.APIS) + '\\/*'),
  method: 'get',
  res: priv.doRes
}, {
  url: new RegExp('\\/' + priv.getRegExpOrStrings(CONST.PATH.APIS) + '\\/*'),
  method: 'post',
  res: priv.doRes
}, {
  url: new RegExp('\\/' + priv.getRegExpOrStrings(CONST.PATH.APIS) + '\\/*'),
  method: 'put',
  res: priv.doRes
}, {
  url: new RegExp('\\/' + priv.getRegExpOrStrings(CONST.PATH.APIS) + '\\/*'),
  method: 'delete',
  res: priv.doRes
}]).listen(CONST.PORT.API);

CORS(Cross-Origin Resource Sharing)のエラーに対応します。CORSの詳細は下記のサイトにあります。
CORSまとめ

CORS対応のヘッダーを設定する
var headers = {
  'Access-Control-Allow-Origin': '*',
  'Cache-Control': 'no-cache',
  'Cache-Control': 'no-store',
   'Content-Type': 'application/json;charset=UTF-8'
};

リクエストURLのパスからresponseフォルダ配下のJSONファイルを読み込みます。

JSONファイルを読み込む
fs.readFile(filePath, 'utf-8', function (err, fileData) {
  callback(null, {
    status: CONST.STATUS.HTTP,
    headers: headers,
    body: fileData
  });
});

以上です。

7
6
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
7
6