ホームページ  >  記事  >  バックエンド開発  >  FastAPI で無効なリクエストに対するエラー応答をカスタマイズするにはどうすればよいですか?

FastAPI で無効なリクエストに対するエラー応答をカスタマイズするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-21 06:25:03611ブラウズ

How to Customize Error Responses for Invalid Requests in FastAPI?

FastAPI でのカスタム エラー応答処理

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。