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サーバーを用意できるので簡単な動作確認には使えるのではないでしょうか
以上になります。この記事がどなたかの助けになれば幸いです。