0
0

【FastAPI】JSONデコードエラー発生時のハンドリング方法

Posted at

概要

FastAPIフレームワークを使うとき、HTTPリクエストのバリデーションエラーが発生したときのエラーハンドリングを実装しました。今回は、JSONのデコードエラーの時の実装方法を紹介します。

サンプルコード

FastAPIのmain.pyに以下のように実装。

@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({"status": "xxxx",
                                  "msg": "xxxxxxxxx"}),
    )

上記コードでは、FastAPIの@app.exception_handlerデコレータを使用して、RequestValidationErrorという特定の例外が発生した場合に、カスタムのエラーレスポンスを返すための関数(エラーハンドラ関数)を指定しています。

async def validation_exception_handler(request: Request, exc: RequestValidationError):は、エラーハンドラ関数のシグネチャ。requestはHTTPリクエストオブジェクト、excは例外クラスRequestValidationErrorを引数として受け取ります。

関数本体では、JSONResponseを使用してエラーレスポンスを作成。
jsonable_encoderは、PythonオブジェクトをJSONエンコード可能なデータに変換する関数です。

HTTP_422_UNPROCESSABLE_ENTITYは、リクエストが受け入れ可能な形式ではない場合やリクエストが処理できない場合に使用されるHTTPステータスコード(400番台は「クライアントエラー」ですね)。
今回はJSONリクエストの形式エラーが発生した場合に適用しています。

参考:FASTAPIの公式ドキュメント
Handling Errors

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0