JavaScript
Node.js
REST-API
mocky

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

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
});
});

以上です。