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
実行結果
$ 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" } }
公式ドキュメント
上記のサンプルコードは、公式ドキュメントの内容から記載しています。
詳細や最新情報は公式ドキュメントを参照ください