本記事の背景
Flaskでjsonを扱う時によく検索されるが、背景にあるAPI開発に関して網羅的な説明はあまり見かけないため、本記事はFlaskを使い、API開発の基礎に触れつつ、jsonを扱い、実際のAPIテストでよく使うPostmanを紹介しながら、API開発における一連な動きについて解説する
Restful API開発とは
詳細はAWSに任せるとして、要は、HTTPと同じ、GET/POST/PUT/DELETEを使い、データのやり取りする。
メリットとして、上記以外は使わないので、実装しやすい。
デメリットとしては、上記以外で特殊なケースの場合、複数のAPIを叩くことになる場合がある
バックエンド処理
上記のRestful APIのバックエンド側の実装としては、DBとの連携を想定した場合それぞれ以下に示す。
GET:DBからデータを取得する(Select処理)
POST:DBのデータを追加する(Insert処理)
PUT:DBのデータを更新する(Update処理)
DELETE:DBのデータを削除する(Delete処理)
jsonデータによる媒介
上記のAPIとバックエンドの間には、jsonデータを生成することにより、色んなシステムがあっても、ほぼ同じメソッドを実装することでフロントエンドとバックエンドのやり取りができる。
また、ライブラリにはjsonを扱うための標準機能が用意されている。
例えば、jinja2/JavaScript/Python/Flaskはそれぞれjsonを扱える。
また、jsonは基本的に辞書型変数としてPythonで扱えるので、データの堅牢度も高い。
但し、jsonのデメリットは、入れ子構造の辞書型や大規模データを扱う場合は、動きとしては、遅いため、別途検討が必要
POSTMANによるテスト
POSTMANは、APIテスト、Scriptを組んでテスト自動化も可能なテストツールです。無償提供されている。
Flask実装例
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/', methods=['GET','POST'])
def index():
if (request.method == 'POST'):
json = request.get_json()
return jsonify({'you post' : json})
else:
return jsonify({"about":"hello world!" })
@app.route('/multi/<int:num>', methods=['GET'])
def get_multiply10(num):
return jsonify({'result': num*10})
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
POSTMANによるGET結果
POSTMANによるPOST結果
別のAPIのGET結果
バックエンドのデバッグログ
127.0.0.1 - - [19/Nov/2023 12:50:19] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [19/Nov/2023 12:54:33] "POST / HTTP/1.1" 200 -
127.0.0.1 - - [19/Nov/2023 12:56:59] "GET /multi/10 HTTP/1.1" 200 -