FastAPI: JSON データを使用した POST リクエストの処理
API を構築する場合、さまざまなタイプの HTTP リクエストを処理することが不可欠です。 GET リクエストはスムーズに動作しますが、POST リクエストは、特に JSON データを送信するときにエラーが発生することがよくあります。 FastAPI の POST リクエストでよく発生する「422 Unprocessable Entity」エラーのトラブルシューティングを行うために、JSON データを期待するエンドポイントを定義するためのさまざまなアプローチを検討します。
アプローチ 1: Pydantic モデルの使用
JSON データを受け入れるリクエスト本文を定義するには、Pydantic モデルを利用できます。必要なフィールドを含むモデルを作成し、それをエンドポイント定義に組み込みます。
from pydantic import BaseModel class User(BaseModel): user: str @app.post('/') def main(user: User): return user
アプローチ 2: Embed を使用したボディ パラメーター
Pydantic を使用したくない場合モデルでは、埋め込みオプションを使用して Body パラメータを使用できます。これにより、関数内のフィールドとしてリクエスト本文に直接アクセスできるようになります。
from fastapi import Body @app.post('/') def main(user: str = Body(..., embed=True)): return {'user': user}
アプローチ 3: 辞書パラメーター (あまり推奨されません)
あまり推奨されないアプローチパラメータとして辞書型を使用する必要があります。ただし、この方法では属性のカスタム検証が提供されず、柔軟性が制限されます。
from typing import Dict, Any @app.post('/') def main(payload: Dict[Any, Any]): return payload
アプローチ 4: FastAPI リクエスト オブジェクトを使用する
自信がある場合受信した JSON データには、FastAPI Request オブジェクトを使用して直接アクセスできます。このアプローチでは、エンドポイントを async def で定義する必要があることに注意してください。
from fastapi import Request @app.post('/') async def main(request: Request): return await request.json()
コードのテスト
エンドポイントをテストするには、Python リクエスト ライブラリまたはJavaScript Fetch API。
Python の使用リクエスト:
import requests url = 'http://127.0.0.1:8000/' payload ={'user': 'foo'} resp = requests.post(url=url, json=payload) print(resp.json())
JavaScript Fetch API の使用:
fetch('/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({'user': 'foo'}) }) .then(resp => resp.json()) // or, resp.text(), etc .then(data => { console.log(data); // handle response data }) .catch(error => { console.error(error); });
特定の要件に基づいて適切なアプローチを選択し、さまざまなテスト オプションを考慮するを使用すると、FastAPI で JSON データを使用した POST リクエストを効果的に処理できます。
以上がFastAPI で JSON データを使用した POST リクエストを効果的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。