Python Flaskを使ってREST APIを作成する

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"
    }
}

公式ドキュメント

上記のサンプルコードは、公式ドキュメントの内容から記載しています。

詳細や最新情報は公式ドキュメントを参照ください