PythonのフレームワークであるFlaskを使って、GETメソッドとPOSTメソッドに応答するシンプルなREST APIを作成します。
Flaskモジュールインストール
pipでFlaskモジュールをインストールします。
pip install flask flask_restful
Flaskを使ったREST APIのサンプルコード
サンプルコードの仕様
/ GET
クエリパラメータに指定した、nameとageをJSON形式で返却します。
パラメータ
name:必須チェック
age:型チェック(int)
/ POST
クエリパラメータに指定した、q_paramとフォームに指定したf_paramをJSON形式で返却します。
パラメータ
q_param:型チェック(int)※URLから取得
f_param:チェックなし※フォームから取得
実行方法
上記、サンプルコードを”flask_api.py”という名前で保存して以下のコマンドを実行します。
実行コマンド
実行結果
$ python flask_api.py
* Serving Flask app "flask_api" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Restarting with stat
* Debugger is active!
* Debugger PIN: 280-531-524
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
ワーニングメッセージ(Flaskビルドインサーバーは開発用サーバーであり、本番環境では利用しない)が表示されていますが、URL”127.0.0.1″のポート”5000″でflaskが起動しています。
GET実行例
Curlコマンドで結果を確認します。
正常系
“name”に”Taro”、”age”に”88″を指定します。
※”127.0.0.1″は、”localhost”に置き換えて下さい
$ curl localhost:5000?name='Taro'\&age=88
{
"name": "Hello Taro!",
"age": 88
}
URLに指定したパラメータが返却できています。
異常系
Curlコマンドのオプション”-i”でHTTPヘッダ情報も表示します。
“name”入力なし。必須チェックエラー。
$ curl -i localhost:5000
HTTP/1.0 400 BAD REQUEST
Content-Type: application/json
Content-Length: 67
Server: Werkzeug/1.0.1 Python/3.6.4
Date: Mon, 04 May 2020 15:00:57 GMT
{
"message": {
"name": "Name cannot be blank!"
}
}
“name”指定するが、値を入れない。必須チェックエラー。
$ curl -i localhost:5000?name=
HTTP/1.0 401 UNAUTHORIZED
Content-Type: application/json
Content-Length: 43
Server: Werkzeug/1.0.1 Python/3.6.4
Date: Mon, 04 May 2020 15:06:03 GMT
{
"message": {
"name": "Name cannot be blank! 2"
}
}
上記は、abort処理で表示しているエラー。HTTPレスポンスコードは、15行目で指定した”401“が返却されています。
“age”を文字型で入力。タイプエラー。
$ curl -i localhost:5000?name='Taro'\&age=aaa
HTTP/1.0 400 BAD REQUEST
Content-Type: application/json
Content-Length: 68
Server: Werkzeug/1.0.1 Python/3.6.4
Date: Mon, 04 May 2020 15:08:52 GMT
{
"message": {
"age": "Age cannot be converted"
}
}
POST 実行例
正常系
URLパラメータとして”q_param”に”100″を指定し、Curlのオプション”-d”でフォームのパラメータとして、”f_param”に”form_parameter”を指定します。
$ curl -X POST localhost:5000?q_param=100 -d f_param=form_parameter
{
"post": "Hello World!",
"qParam": 100,
"fParam": "form_parameter"
}
URLの文字列、フォームからそれぞれ値が取得できています。
異常系
“q_param”を文字型で入力。タイプエラー。
$ curl -X POST localhost:5000?q_param=query -d f_param=form_parameter
{
"message": {
"q_param": "q_param is numbers"
}
}
公式ドキュメント
上記のサンプルコードは、公式ドキュメントの内容から記載しています。
詳細や最新情報は公式ドキュメントを参照ください