1. HOME
  2. ブログ
  3. IT技術
  4. json-serverで手軽にREST APIのモックサーバーを作る
json-serverで手軽にREST APIのモックサーバーを作る

json-serverで手軽にREST APIのモックサーバーを作る

はじめに

フロントエンドでの開発中、API がデプロイされていない状況でも、API 通信の挙動を確認したい!

そんな状況は開発を行っている中でよく遭遇します。

特に新規開発では、フロントエンドとバックエンド同時に開発が進むことが多いため、フロント側で動作確認したい API がまだ開発中...というパターンが多いです。

そこで、そんな時に手軽にローカルで API の挙動が確認できるモックサーバーの作り方と使い方を今回紹介していきます。

環境構築

json-server という Node.js のパッケージを使用するため、Node.js をインストールする必要があります。

json-server は手軽に REST API のモックサーバーを作ることのできるパッケージです。

https://github.com/typicode/json-server

基本的な GET メソッドの REST API であれば、コーディング不要で json データを用意するだけで OK なので、初学者にもハードルが低く導入しやすいですね。

Node.js のインストールについては、完了している前提で進めていきます。

Mac の方は以下の記事が参考になると思います。

https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09

package.json の作成

今回は複数の開発者同士で環境を共有する想定で、 package.json を利用してインストールする管理していきます。

sample-api-mock というディレクトリを作成して、その直下で npm init  コマンドを実行しましょう。

実行するとインタラクティブに質問されるので、すべて回答すると package.json が生成されます。

今回は全て空欄でも大丈夫です。

以下のような package.json が生成されれば OK です!

json-server のインストール

それでは json-server をインストールしていきます!

以下のコマンドを実行して、ローカルに json-server をインストールします。

package-lock.json というファイルと、 node_modules というディレクトリが生成されたら成功です。

これで環境構築は終了です!

GET メソッドのモック化

冒頭で述べましたが、json-server では json 形式でレスポンスデータを登録していきます。

今回はシンプルに user を管理するデータベースを想定します。

レスポンスデータの登録

まず、 db.json という名前でファイルを用意します。

その後、以下のように記述します。

これだけでレスポンスデータの準備完了です!

モックサーバーの起動

それではいよいよモックサーバーを起動してみましょう!

package.json に以下を追記してください。

これで、 npm run json-server  をターミナルで実行することで、 json-server --watch db.json -port 5000  を実行でき、コマンドを簡略化することができます。

加えて npm run  で実行するコマンドは、プロジェクトローカルにインストールしているパッケージのパスを参照するので、各々の開発環境に依存しない運用を行えるというメリットもあります。

それでは、ターミナルで npm run json-server  を実行してモックサーバーを起動しましょう!

ターミナルに以下のような表示がされれば起動成功です。

これで、 http://localhost:5000 にモックサーバーが起動されました!

レスポンスを確認する

それではモックサーバーの REST API との通信を確認していきましょう!

API 通信を確認するには Postman を利用したりなど様々な方法がありますが、ここでは基本に立ち返り curl  コマンドを使って確認してみます。

まずは user の取得から。

1つのターミナルはモックサーバーの起動に利用しているので、新しいターミナルウィンドウを開き以下コマンドを実行しましょう。

実行結果で以下が表示されれば成功です!

db.json で記述した user のデータがレスポンスで返ってきていますね。

該当部分に配列でデータを登録すれば、ちゃんと配列で返ってきます。

ここまでが基本的な json-server を利用したモックサーバーの使い方になります。

ルーティング処理

実際に GET メソッドでデータを取得する際は、クエリパラメータを設定し指定したリソースを取得することが多いと思います。

現在の実装だと、どのようなクエリパラメータを付与しても、同じデータしか返ってきません。

今章では、ルーティング処理を通じてクエリパラメータに応じて返すデータを変える処理をプラスしてみましょう。

今回は userId というクエリパラメータに応じて、返す user を変更する処理を実装していきます。

レスポンスデータの準備

先程の db.json に以下の部分を追記しましょう。

この追加した2つの user にルーティング処理を行うために、プロジェクトのルートディレクトリに routes.json というファイルを記述し、以下のように記述します。

これで、クエリパラメータ userId で指定した id に対応した user のデータを返すルーティング処理を実装できました。

あとは、このルーティング処理を参照するようにモックサーバーを起動してあげればOKです。

モックサーバーの起動

package.json の scripts ブロックに記述した json-server に、--routes オブションを追記します。

あとは、先程と同様に npm run json-server  でモックサーバーを起動してあげればOKです!

Other routes が追加され、routes.json で指定したルーティング処理が反映されていることが確認できますね。

レスポンスの確認

それではまた curl  コマンドでAPI通信を行いレスポンスを確認してみましょう。

以下コマンドを実行します。

以下のように指定した id の user が返ってきていれば成功です!

以上 json-server にルーティング処理を反映する方法でした。

GET メソッド以外のモック化

開発で利用する API は GET リクエストだけじゃないですよね。

POST / PUT / PATCH / DELETE と様々なリクエストメソッドを利用するはずです。

これらと GET メソッドの違いは、実際にDB上のデータを更新するというところにあります。

それでは、user リソースに対して新しい user を作成する POST メソッドを実行してみます。

POST メソッドの実行が成功しました。

そして、db.json を確認してみましょう。

POST メソッドのリクエストボディで送信したデータが user オブジェクトに登録され、書き変わっていますね。

正常な挙動であることは間違いないのですが、

「ただ疎通を確認したいだけでデータまで書き変わってほしくない...」

ということも多いと思います。

実際モックサーバーをチーム開発前提で Git 管理していると、モックサーバーを起動して疎通確認をするたびに差分が出ますし、db.json が破茶滅茶なことになりますし、かなり面倒です。

それを解決するためには、API通信をモックサーバーで処理する前に1つ別の処理を挟み、 db.json が更新されないようにする必要があります。

そこで登場するのがミドルウェアです。

ミドルウェアとは?

ミドルウェアとは、文字通りOS⇄アプリケーションの中間(ミドル)に位置するソフトウェアのことで、ざっくり言うとアプリケーションに必要かつ特化した機能を提供するソフトウェアです。

今回の場合では、「APIリクエストを行うOS⇄API通信を処理するモックサーバー」と置き換えた方がわかりやすいと思います。

この2つの間に入り、db.json が更新されないようにする機能を提供するアプリケーションをミドルウェアとして実装していくわけです。

ミドルウェアの実装

プロジェクトのルートディレクトリに middleware.js というファイルを作成し、以下のように記述します。

内容は、送信されたリクエストメソッドが GET 以外の場合は GET に置き換えて処理を行う、という単純なものです。

これで、どのメソッドでモックサーバーにリクエストを行っても、ミドルウェアが全て GET メソッドに置き換えてくれるため、 db.json が更新されることがなくなります。

あとは、これをルーティング処理の時と同様に、モックサーバーに組み込んで起動します。

モックサーバーの起動

package.json の scripts ブロックに記述した json-server に、 --middleware オプションをさらに追記しましょう。

そして、先ほどまでと同様に npm run json-server  でモックサーバーを起動しましょう。

Loading middleware.js  が表示され、ミドルウェアの処理を組み込んだモックサーバーを起動できたことが確認できました。

POST メソッドでレスポンス & 動作確認

それでは、もう一度今章の冒頭と同じ POST メソッドでリクエストを送り、動作確認していきましょう。

まずはレスポンスから。

db.json の user に登録されているデータがレスポンスで返ってきてますね。

ミドルウェアの処理で GET リクエストに変換され、 db.json にある user オブジェクトが取得されたためですね。

次に db.json が更新されていないか確認しましょう。

これで無事 db.json を更新せず、 GET メソッド以外のリクエストをモック化することができました!

サンプル

↓に今回のコードをまとめていますので、ぜひ確認用にご利用ください!

さいごに

いかがだったでしょうか?

以上が json-server を用いた基本的な REST API のモックサーバーの実装方法と使い方でした。

今回は基本に重点を置いて解説したので触れませんでしたが、ミドルウェア部分ではレスポンスにも処理を加えることができるので、

  1. ステータスコードを変更する
  2. エラーを返す
  3. ヘッダを付与して返す

など、様々な挙動をモック化することができます。

触ってみて、こちらにも興味があればぜひ調べてみてくださいね!

この記事が1人でも多くの方のお役に立てれば幸いです。

ご覧いただきありがとうございました!

書いた人はこんな人

こー(エンジニア)
「クレヨンしんちゃんは人生のマニュアル」が口癖なモバイルアプリとバックエンドやってる人

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア