FlaskのJSON返却をRESTっぽく
今回は、FlaskのJSON返却をもう少し改善します。
目次
はじめに
今回の検証は、Flaskを使ってPostgreSQLからデータを取得しJSON形式で返却します。
URLリクエスト上のパラメータを使って返却結果をフィルタします。
PostgreSQL上へのデータ投入などは、以下の記事に書いてありますので、必要な方は参照してください。
今回の確認環境は以下となります。
- PC:Mac mini(M1 ,2020)
- OS:macOS Monterey バージョン12.0.1
- Python:3.9.9
- Flask:2.0.2
- psycopg2:2.9.3
- Docker:20.10.8
- PostgreSQL:13.3(Dockerコンテナ)
コード作成・検証
今回作成したPythonコードは以下となります。
from flask import Flask, jsonify ,request
import psycopg2
import psycopg2.extras
app = Flask(__name__)
@app.route('/query' ,methods=['GET'])
def pgrest():
# Create connection.
conn = psycopg2.connect(
host='localhost',
port=15432,
database='takamoto',
user='keiji',
password='keiji',
)
# Build where(like) condition.
name = '%' + request.args.get('name', default='', type=str) +'%'
# Create cursor and fetch and close.
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
cur.execute('select * from covid19 where country like %(name)s order by no', {'name': (name,)})
ds = cur.fetchall()
cur.close()
# Close connection.
conn.close()
# Convert dictionary with column name.
dictds = []
for row in ds:
dictds.append(dict(row))
# return json
return jsonify({'status':'OK' ,'dataset':dictds})
app.run(port=8888 ,debug=True)
コード上のポイントを以下に示します。
- URLリクエストを取得するためにFlaskのrequestモジュールをインポート(1行目)
- GETパラメータnameを、requestオブジェクトから取得しSQLのlike句用の文字列を生成(19行目)
- 作成したlike句ようの文字列を検索用のSQLに設定(23行目)
プログラムを起動した状態でブラウザから以下のリクエストを発行すると、国名(カラムcountry)が”Jap”と部分一致するデータをJSON形式で返却します。
http://localhost:8888/query?name=Jap
まとめ
今回は、Flaskを使って少しだけRESTっぽいAPIを作成しました。
次回以降は、jQueryを使ってフロントエンドとの連携を記事にしていこうと思います。
コメント