ホームページ >バックエンド開発 >Python チュートリアル >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 で特定のルートのエラー応答をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。