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

FastAPI で特定のルートのエラー応答をカスタマイズするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-22 16:18:20151ブラウズ

How Can I Customize Error Responses for Specific Routes in FastAPI?

FastAPI での特定のルートのエラー応答のカスタマイズ

概要

FastAPI [1](#sources) は、カスタマイズエラー用の🎜>多用途プラットフォーム特定のルートに対する応答。これにより、開発者は特定のアプリケーション要件に応じてエラー処理を調整することができます。デフォルトの例外ハンドラーをオーバーライドするか、サブアプリケーションなどの他の手法を使用することで、ユーザー エクスペリエンスを向上させ、有意義なフィードバックを提供するカスタム エラー応答を作成できます

オプション 1: デフォルトの例外ハンドラーをオーバーライドする

1 つのアプローチには、

デフォルトの例外ハンドラーをオーバーライドするが含まれます。リクエスト検証エラー。この例外は、リクエストに無効なデータが含まれている場合に発生します。カスタム ハンドラーを実装すると、必要なカスタム ヘッダー に関連する特定のエラーを確認し、カスタム エラー応答を返すことができます。

from fastapi import FastAPI, Request, Header, status
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from fastapi.encoders import jsonable_encoder

app = FastAPI()
routes_with_custom_exception = ['/']

@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request: Request, exc: RequestValidationError):
    if request.url.path in routes_with_custom_exception:
        # check whether the error relates to the `some_custom_header` parameter
        for err in exc.errors():
            if err['loc'][0] == 'header' and err['loc'][1] == 'some-custom-header':
                return JSONResponse(content={'401': 'Unauthorized'}, status_code=401)
            
    return JSONResponse(
        status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
        content=jsonable_encoder({'detail': exc.errors(), 'body': exc.body}),
    )
オプション 2: Sub -アプリケーション

もう 1 つの代替方法には、

サブアプリケーションの作成とそれらをメインアプリケーションにマウントします。これにより、メイン アプリケーションの他のルートに影響を与えることなく、サブアプリケーション内のルートに固有のカスタム エラー処理が可能になります。

# main API
app = FastAPI()

# sub-application with custom error handling
subapi = FastAPI()
@subapi.exception_handler(RequestValidationError)
async def validation_exception_handler(request: Request, exc: RequestValidationError):
    # Handle error specific to sub-application's routes
    return JSONResponse(content={'401': 'Unauthorized'}, status_code=401)

# mount sub-application
app.mount('/sub', subapi)
オプション 3: カスタム APIRoute クラス

このアプローチには、try-excel ブロッ​​ク内でリクエストの検証を処理する

カスタム APIRoute クラス を作成することが含まれます。 RequestValidationError が発生した場合、カスタム エラー応答を返すことができます。

from fastapi import FastAPI, APIRouter, APIRoute, Request, Header, HTTPException
from fastapi.responses import JSONResponse
from fastapi.exceptions import RequestValidationError

class ValidationErrorHandlingRoute(APIRoute):
    def get_route_handler(self) -> Callable:
        original_route_handler = super().get_route_handler()

        async def custom_route_handler(request: Request) -> Response:
            try:
                return await original_route_handler(request)
            except RequestValidationError as e:
                raise HTTPException(status_code=401, detail='401 Unauthorized')

# create new router with custom error handling
router = APIRouter(route_class=ValidationErrorHandlingRoute)

# add custom error handling to router
@router.get('/custom')
async def custom_route(some_custom_header: str = Header(...)):
    return {'some-custom-header': some_custom_header}

# add router to app 
app.include_router(router)
結論

これらの手法を検討することで、開発者は特定の要件に合わせて FastAPI のエラー応答をカスタマイズし、より多くのエラー応答を提供できます。カスタマイズされたユーザーエクスペリエンスと強化されたエラー処理機能.

ソース

    [FastAPI ドキュメント: HTTP 例外の処理](https://fastapi.tiangolo.com/Exception-handlers/)

以上がFastAPI で特定のルートのエラー応答をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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