API を構築する場合、クライアントから JSON 形式でデータを受け取ることが多い。Flask では request.json または request.get_json() で JSON データを取得できる。
JSON リクエストの受け取り
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/api/users', methods=['POST']) def create_user(): data = request.json name = data.get('name') email = data.get('email') return jsonify({'message': f'User {name} created'}), 201
request.json はリクエストボディを JSON としてパースし、Python の辞書として返す。Content-Type が application/json でない場合は None を返す。
get_json メソッド
request.get_json() を使うと、オプションを指定できる。
data = request.get_json(force=True, silent=True)
| force | Content-Type に関係なく JSON としてパースする |
| silent | パースに失敗しても例外を投げず None を返す |
JSON レスポンスの返却
JSON を返すには jsonify 関数を使う。
@app.route('/api/users/<int:user_id>') def get_user(user_id): user = {'id': user_id, 'name': 'Alice'} return jsonify(user)
jsonify は辞書を JSON 文字列に変換し、Content-Type を application/json に設定した Response オブジェクトを返す。
エラーハンドリング
JSON のパースに失敗した場合や、必須キーがない場合のエラー処理も重要である。
@app.route('/api/data', methods=['POST']) def receive_data(): data = request.get_json() if data is None: return jsonify({'error': 'Invalid JSON'}), 400 if 'value' not in data: return jsonify({'error': 'Missing required field: value'}), 400 return jsonify({'received': data['value']})
クライアントに適切なエラーメッセージを返すことで、デバッグが容易になる。