Dans FastAPI, déclencher une RequestValidationError vous permet d'envoyer une réponse d'erreur personnalisée. Ceci est utile pour les points de terminaison qui nécessitent que des conditions spécifiques soient remplies, telles qu'un en-tête requis.
Cette option vous permet de remplacer le gestionnaire d'exceptions par défaut pour RequestValidationError, vous permettant de personnaliser la réponse d'erreur.
from fastapi import FastAPI, Request, Header, status from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse 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: 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}), )
La création d'une sous-application vous permet de créer une instance d'API distincte avec son propre gestionnaire d'exceptions. Cela vous permet de personnaliser la gestion des erreurs spécifiquement pour la sous-application.
from fastapi import FastAPI from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse app = FastAPI() subapi = FastAPI() @subapi.exception_handler(RequestValidationError) async def validation_exception_handler(exc: RequestValidationError): return JSONResponse(content={'401': 'Unauthorized'}, status_code=401) @subapi.get('/') async def subapi_route(some_custom_header: str = Header(...)): return {'some-custom-header': some_custom_header} app.mount('/sub', subapi)
Cette méthode vous permet de modifier le comportement d'une route spécifique en utilisant une classe APIRoute personnalisée.
from fastapi import FastAPI, APIRouter, Response, Request, Header, HTTPException 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') return custom_route_handler app = FastAPI() router = APIRouter(route_class=ValidationErrorHandlingRoute) @router.get('/custom') async def custom_route(some_custom_header: str = Header(...)): return {'some-custom-header': some_custom_header} app.include_router(router)
L'option 1 est simple à mettre en œuvre lorsque vous n'avez besoin que de personnaliser la réponse d'erreur pour des itinéraires spécifiques. L'option 2 convient lorsque vous souhaitez plus de contrôle sur le sous-domaine de votre API, comme l'application de différentes politiques de sécurité ou la gestion des exceptions. L'option 3 vous donne plus de contrôle sur les itinéraires individuels et est utile pour gérer des cas spécifiques au sein d'un itinéraire.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3