FastAPI アプリケーションでは、クライアントに有益な応答を提供するためにエラー処理が不可欠です。よく発生する問題の 1 つは、リクエストで追加データまたは無効なデータを送信するときに 422 Unprocessable Entity エラーを受け取ることです。この記事では、このようなシナリオに対処するためにエラー応答をカスタマイズする方法を説明します。
次の FastAPI バックエンドの例を考えてみましょう:
from fastapi import FastAPI app = FastAPI class Demo(BaseModel): content: str = None @app.post("/demo") async def demoFunc(d: Demo): return d.content
data = { などの追加データを含むリクエストを送信するとき"content": "some text here"}aaaa、API は次の応答で 422 エラーを返します:
{ "detail": [ { "loc": [ "body", 47 ], "msg": "Extra data: line 4 column 2 (char 47)", "type": "value_error.jsondecode", "ctx": { "msg": "Extra data", "doc": "{\n \"content\": \"some text here\"}aaaaa", "pos": 47, "lineno": 4, "colno": 2 } } ] }
エラー応答をカスタマイズするために、FastAPI ではリクエスト検証例外ハンドラーをオーバーライドできます。まず、必要なモジュールをインポートし、カスタム例外ハンドラー関数を定義します。
from fastapi import FastAPI, Body, Request, status from fastapi.encoders import jsonable_encoder from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse app = FastAPI() @app.exception_handler(RequestValidationError) async def validation_exception_handler(request: Request, exc: RequestValidationError): return JSONResponse( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, content=jsonable_encoder({ "detail": exc.errors(), "body": exc.body, "custom msg": { "Your error message" } }), )
この関数は、RequestValidationError 例外をインターセプトし、カスタマイズされた JSON 応答を生成します。エラーの詳細、リクエスト本文、および任意のカスタム メッセージを含めることができます。
たとえば、無効な JSON 本文を使用すると、次のような応答が返されます。
{ "detail": [ { "loc": ["body", 1], "msg": "invalid json", "type": "json.decoder.JSONDecodeError", "ctx": {} } ], "body": {}, "custom msg": { "Your error message" } }
または、次のようになります。エラー メッセージのみを含むプレーン テキストの応答を返すことができます。
from fastapi.responses import PlainTextResponse @app.exception_handler(RequestValidationError) async def validation_exception_handler(request, exc): return PlainTextResponse(str(exc), status_code=422)
FastAPI でエラー応答の動作をカスタマイズすることにより、API に対してより有益で一貫したエラー処理を提供できます。これにより、ユーザー エクスペリエンスが向上し、開発者と API 利用者の両方のデバッグが簡素化されます。
以上がFastAPI で無効なリクエストに対するエラー応答をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。