Help us understand the problem. What is going on with this article?

json-server に、express ミドルウェアを指定するオプションが追加された

More than 3 years have passed since last update.

json-server の紹介

json-server とは

json-server とは、コーディング不要で簡単に、REST API の mock サーバーを作成できるツールです。

また、json-server はそれ自体が express application であり、他のスクリプトから module として使用することで、json-server を自由に拡張することが可能です。

json-server の使い方

まず、db.json を作成します。 json-server はこれを元に API を作成します。

db.json
{
  "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 ミドルウェアが使用可能になった。
fe2o3
ソフトウェア開発、教育、情報セキュリティ事業を通して、人とコンピュータのよい関係をつくる企業です。CTF大会開催のトータルソリューション「CTFKit」といった自社開発や、スタートアップに特化した受託開発など事業展開しています。
https://fe2o3.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away