json-serverでPOSTリクエストの動作確認をしてみた

`json-server`を用いてPythonの`requests.post()`で実装したPOSTリクエストの動作確認をしてみました。
2023.11.17

DA事業本部の横山です。

今回はjson-serverを用いてPythonのrequests.post()で実装したPOSTリクエストの動作確認をしてみました。

前提条件

本記事で利用している各ライブラリのバージョンは以下になります。

  • Node.js: v16.12.0.
  • json-server: 0.17.4

概要

  • json-serverでAPI Mockサーバーを立てる
    • POSTリクエストのレスポンス
  • Pythonのrequests.post()でPOSTリクエストを送る
  • レスポンス内容を確認する

json-server でAPI Mockサーバーを立てる

まずはjson-serverをインストールします。

$ yarn init
$ yarn add json-server

動作確認をしたいAPIの定義をdb.jsonに記載します。 personで記載しているAPIのパスには/を含めることができないことに注意してください。/を含むパスに対するリクエストを行う方法については後述します。

{
    "person": [
        {
            "id": 1,
            "name": "Tanaka Tarou",
            "age": 20
        }
    ]
}

通常のjson-serverではPOSTリクエストは、リクエスト内容を先ほど用意したdb.jsonに書き加える動作となってしまいます。 今回は、POSTリクエストのレスポンス内容として、db.jsonに記載した値を取得することを目的とするためmiddleware.jsで、リクエスト内容を書き換えてjson-serverがGETリクエストを受け取った時の動作をさせてレスポンス内容を受け取りたいと思います。

以下のコードでは、POST → GETリクエストへの書き換え、/を含むパスへのPOSTリクエストをdb.jsonに記載したpersonの1レコード目を返却するように書き換えています。

json-serverではルーティングの変換を設定ファイルで行う方法もありますが、私の環境ではうまくいかなかったのでmiddleware.jsで対応しました。

module.exports = function (req, res, next) {
    console.log(req.headers);
    console.log(req.method);
    console.log(req.body);

    if (req.method === 'POST') {
        req.method = 'GET'
        if (req.url === "/api/person") {
            req.url = "/person/1"
        }
    }
    next()
}

上記の準備が整ったらjson-serverを起動させましょう。

$ npx json-server --watch db.json -p 3000 -m middleware.js 

  \{^_^}/ hi!

  Loading db.json
  Loading middleware.js
  Done

  Resources
  http://localhost:3000/person

  Home
  http://localhost:3000

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

これで、/api/personへのPOSTリクエストを受け取ったときに、db.jsonに記載したpersonの1レコード目を返却するAPIが用意できました。

Pythonのrequests.post()を用いて実際にAPIリクエストを送信してみます。

import requests

host = "localhost:3000"
endpoint = "api/person"
url = f"http://{host}/{endpoint}"

response = requests.post(url=url)

print(response.json())
$ python test.py 
{'id': 1, "name": 'Tanaka Tarou', 'age': 20}

db.jsonに記載した内容が、json-serverのAPI Mockサーバーから返却されました。

これで、対向のAPIがまだ用意されていない場合でもPythonコードの動作確認が行えますね。

注意点として、今回の例ではヘッダ情報やリクエストパラメータの検証は行っていないためあくまでrequestsの実装部分をひとまず固定値で通したいといった場合にのみ使えるためご注意ください。

おわりに

json-serverを用いてPythonのrequests.post()で実装したPOSTリクエストの動作確認をしてみました。 固定値ではありますが、手軽に任意の値を返すAPIサーバーを用意できるので簡単な動作確認には使えるのではないでしょうか

以上になります。この記事がどなたかの助けになれば幸いです。