json-server の紹介
json-server とは
json-server とは、コーディング不要で簡単に、REST API の mock サーバーを作成できるツールです。
また、json-server はそれ自体が express application であり、他のスクリプトから module として使用することで、json-server を自由に拡張することが可能です。
json-server の使い方
まず、db.json
を作成します。 json-server はこれを元に API を作成します。
{
"posts": [
{ "id": 1, "title": "json-server", "author": "typicode" }
],
"comments": [
{ "id": 1, "body": "some comment", "postId": 1 }
],
"profile": { "name": "typicode" }
}
そして、以下のコマンドを実行します。
$ json-server --watch db.json
これでサーバーは完成です。http://localhost:3000 からアクセスできます。
$ curl -H "Accept: application/json" localhost:3000/posts/1
{ "id": 1, "title": "json-server", "author": "typicode" }
$ curl -H "Accept: application/json" localhost:3000/posts -H 'Content-Type: application/json" -d '{ "title": "new data", "author": "zakuro" }'
{ "id": 2, "title": "new data", "author": "zakuro" }
$ curl -H "Accept: application/json" localhost:3000/posts/2
{ "id": 2, "title": "new data", "author": "zakuro" }
これまでの json-server
cli ツールと module の乖離
前述したように、json-server は module として実装されており、その振る舞いを自由にカスタマイズできるという特徴があります。
しかし、現状では --watch
などの多くの機能は cli ツール部分に実装されており、json-server を module として使用する場合、それらの機能は利用できません。
また、cli ツールのカスタマイズ性はあまり高くないため、認証等の独自機能を利用したい場合は、cli ツールは利用できませんでした。
これからの json-server
-m オプションの追加
#343 で、-m オプションが追加されました。これによって、cli ツールから任意の express ミドルウェアが使用できるようになりました。
2016-08-14 現在リリースされていないため、この機能を使用するためには npm install git://github.com/typicode/json-server.git#e9d1da2ab78acfc7c5a7cbcc21edc54d242c3dad
のように直接コミットIDを指定する必要があります。
-m オプションは、ミドルウェアのパスを引数に取ります。内部的には path.resolve
したものを require してから express.use
に渡しているので、それが動作するような値であれば指定可能です。
また、-m オプションを複数回指定することで、複数のミドルウェアを指定できます。設定ファイルを使用する場合は、配列を指定することもできます。
$ cat hello.js
module.exports = function (req, res, next) {
res.header("X-Hello", "World")
next() }
$ cat helloJa.js
module.exports = function (req, res, next) {
res.header("X-Konnichiwa", "Sekai")
next() }
$ cat config.json
{
"middlewares": ["hello.js", "helloJa.js"]
}
$ json-server -m hello.js -m helloJa.js db.json
# or
$ json-server -c config.json db.json
このオプションの追加によって、cli ツールのカスタマイズ性が非常に高くなります。多くのケースで、json-server を module として使用する必要はなくなるでしょう。cli ツール独自の機能を利用しつつ、認証などの独自機能を実装することが可能です。
まとめ
- json-server を使えば簡単に REST API の mock が作れる。
- -m オプションの追加で、cli ツールから任意の express ミドルウェアが使用可能になった。