サーバーサイドの実装がまだないときとか環境設定が面倒なとき、クライアントサイドでWebリクエストを投げるコードをそれっぽく書いて試したいみたいなケースで、json-serverというJSのツールが便利でした。

僕の場合はwebページ上でXHRを投げる部分を試したくてjson-serverを使いました。

そのときはあまり気づかなかったですが、Star数えぐいですね。3万超えです。

コマンドベースのツールで、npmで入れます。

% npm install -g json-server

jsonファイルを指定して起動します。

% json-server --watch db.json

中身はリクエスト時に返すための情報が書かれてします。

1{
2  "posts": [
3    { "id": 1, "title": "json-server", "author": "typicode" }
4  ],
5  "comments": [
6    { "id": 1, "body": "some comment", "postId": 1 }
7  ],
8  "profile": { "name": "typicode" }
9}

こんへんはドキュメントをみればすぐにわかります。

で、いいなーと思ったのは、サーバーを起動したときです。標準出力に↓のような情報がでています。

ResourcesというところにURLがリストされていますね。ここで有効なURLをパッと確認できるので例えばブラウザで叩くなり、curlコマンドで試すなり、クライアントサイドのアプリから試すなりと色々な使い方ができます。

 1% json-server --watch db.json
 2
 3  \{^_^}/ hi!
 4
 5  Loading db2.json
 6  Done
 7
 8  Resources
 9  http://localhost:3000/posts
10  http://localhost:3000/comments
11  http://localhost:3000/profile
12
13  Home
14  http://localhost:3000
15
16  Type s + enter at any time to create a snapshot of the database
17  Watching...
18
19GET /posts/ 200 8.440 ms - 77
20GET /posts/1 200 4.913 ms - 63
21GET /posts/2 404 3.118 ms - 2
22GET /profile 200 2.962 ms - 24

また、GET以外のリクエストにも対応しています。まずはPOSTを試してみます。(リクエストを組み立てるのにPostmanを使いました)

http://localhost:3000/postsに次のようなjsonをPOSTしました。

1{
2	"id": 2,
3	"title": "added by post request",
4	"author": "hiro"
5}

するとコンソールにはこのようなログが流れ→POST /posts 201 53.069 ms - 69、元ファイルにはid=2のpostが登録されています。

 1{
 2  "posts": [
 3    {
 4      "id": 1,
 5      "title": "json-server",
 6      "author": "typicode"
 7    },
 8    {
 9      "id": 2,
10      "title": "added by post request",
11      "author": "hiro"
12    }
13  ],
14  "comments": [
15    {
16      "id": 1,
17      "body": "some comment",
18      "postId": 1
19    }
20  ],
21  "profile": {
22    "name": "typicode"
23  }
24}

http://localhost:3000/posts/2にDELETEを投げたところ先程追加されたid=2のpostが削除されます。

というような感じでサーバーサイドがなくても、リクエストを投げて返ってくるような簡易なサーバーを一瞬で立てられます。ダミーでいいから誰かにリクエストを投げて動きを確認したいみたいなときに重宝するのではないかと思います。