Flask で JSON リクエストを受け取る
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'}), 201request.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']})クライアントに適切なエラーメッセージを返すことで、デバッグが容易になる。



