砂漠の旅人(たびと)

UNIX / MS-DOS 時代から電脳砂漠を旅しています

【WSL2】json-server を使って、REST API のモックを作ってみる

こんにちは、たびとです。

最近、仕事で REST API を使うことが多くなってきました。 そこで、テスト用のモックが欲しいと思っていたら、 json-server を使って簡単に実現できることがわかりました。

今回は、WSL2 Ubuntu 22.04.1 or 20.04.5 で確認しました。

この記事の対象者

  • REST API 用の簡単なモックが欲しい方
  • Node.js、json-server に興味がある方

nodejs のインストール

まずは、アップデートを確認します。

$ sudo apt update

普通に apt でインストールすると、22.04.1 は v12.22.9、20.04.5 は v10.19.0 と版数が古過ぎたので、 最初に、apt で取得する版数が最新の安定版 v18.x になるように切り替えます。 ちなみに、v10.19.0 の場合、json-server のインストールに失敗しました。

$ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

apt を使って、インストールします。

$ sudo apt install nodejs

版数が v18 であることを確認します。

$ node -v
v18.12.1

json-server のインストール

次に npm を使って、json-server をインストールします。

$ sudo npm install -g json-server

データの用意

以下の内容を data.json として保存します。

{
  "fruits": [
    {"id": 1, "name": "Apple", "price": 100},
    {"id": 2, "name": "Banana", "price": 150}
  ]
}

json-server の起動

json-server の後に先ほど作成した data.json を引数として指定します。

$ json-server data.json

  \{^_^}/ hi!

  Loading data.json
  Done

  Resources
  http://localhost:3000/fruits

  Home
  http://localhost:3000

  Type s + enter at any time to create a snapshot of the database

レコードの表示

別のウィンドウを開き、curl コマンドに GET を指定します。 URI の末尾に id を追加すると、指定のレコードのみを表示できます。

$ curl -L -X GET 'http://localhost:3000/fruits/'
[
  {
    "id": 1,
    "name": "Apple",
    "price": 100
  },
  {
    "id": 2,
    "name": "Banana",
    "price": 150
  }
]

新しいレコードの追加

curl コマンドに POST を指定します。 データは JSON 形式で指定し、id は重複しない番号を指定します。

$ curl -L -X POST 'http://localhost:3000/fruits/' -H 'Content-Type: application/json' \
-d '{"id":"3","name":"strawberry","price":200}'
{
  "id": "3",
  "name": "strawberry",
  "price": 200
}

レコードの変更

curl コマンドに PATCH を指定します。URI の末尾には変更する id を指定します。 ここでは、値段のみを 200 から 300 へ変更します。 PUT でも可能ですが、すべての項目を指定する必要があります。

$ curl -L -X PATCH 'http://localhost:3000/fruits/3' -H 'Content-Type: application/json' \
-d '{"price":300}'
{
  "id": "3",
  "name": "strawberry",
  "price": 300
}

データの削除

curl コマンドに DELETE を指定します。URI の末尾には id を指定します。

$ curl -L -X DELETE 'http://localhost:3000/fruits/3' -H 'Content-Type: application/json'
{}

Postman

curl コマンドが面倒な方は、Postman を使うと、GUI で実行することができます。

www.postman.com

まずは、ip コマンドで IPアドレスを確認します。

$ ip a | grep eth0
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 172.20.251.213/20 brd 172.20.255.255 scope global eth0

次に、json-server に --host オプションの後に IP アドレスを付けて実行します。

$ json-server data.json --host 172.20.251.213

  \{^_^}/ hi!

  Loading data.json
  Done

  Resources
  http://172.20.251.213:3000/fruits

  Home
  http://172.20.251.213:3000

  Type s + enter at any time to create a snapshot of the database

Postman から GET でアクセスしてみます。 赤枠の箇所で、GET を選択し、URI を指定して、Send ボタンを押すと、 curl コマンド同様にレコードの情報を取得することができます。

Postman による実行例

まとめ

json-server を使って、REST APIモックアップを簡単に実現する例を紹介しました。 curl コマンドだと、何度も使う場合は、毎回リクエストを作る必要があるので面倒ですが、 Postman を使うと、何度も使うリクエストはヘッダやパラメータも保存できるので、 REST API の確認には必需品となります。 Postman の詳しい使い方は、またの機会にしたいと思います。

では、皆さん、よい旅を。