Node.jsパッケージ「mocky」を使用して、スタブREST-APIを構築します。
mocky
https://www.npmjs.com/package/mocky
今回使用した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ファイル作成するだけで構築できるようにして、特定のリクエストにも対応できるように実装しました。
ソースコードは下記の場所にあります。
ソースファイルはこちら
仕様
-
response/user/GET.json
のようにJSONファイルを格納するとGET http://localhost:8888/user/
のRESTリクエストに対応したレスポンスを返します。POST、PUT、DELETEも同様です。 - 特定のリクエストをカスタマイズする場合は、
mock_server.js
を修正します。
インストール
まず、Node.js をインストールしてください。次に、package.json
があるフォルダに移動して、下記のコマンドを実行してください。
$ npm install
$ node mock_server.js
実装
mock_server.js
の実装について説明します。mockyのcreateServer
で初期化します。共通処理は、doRes
関数に実装しています。
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まとめ
var headers = {
'Access-Control-Allow-Origin': '*',
'Cache-Control': 'no-cache',
'Cache-Control': 'no-store',
'Content-Type': 'application/json;charset=UTF-8'
};
リクエストURLのパスからresponse
フォルダ配下のJSONファイルを読み込みます。
fs.readFile(filePath, 'utf-8', function (err, fileData) {
callback(null, {
status: CONST.STATUS.HTTP,
headers: headers,
body: fileData
});
});
以上です。