FastAPI [1](#sources) fournit un Plateforme polyvalente pour personnalisation des réponses aux erreurs pour des itinéraires spécifiques. Cela permet aux développeurs de adapter la gestion des erreurs en fonction des exigences spécifiques de l'application. En remplaçant le gestionnaire d'exceptions par défaut ou en employant d'autres techniques telles que des sous-applications, on peut créer des réponses d'erreur personnalisées qui améliorent l'expérience utilisateur et fournissent des commentaires significatifs.
Une approche consiste à remplacer le gestionnaire d'exceptions par défaut pour RequestValidationError. Cette exception est levée lorsqu'une requête contient des données non valides. En implémentant un gestionnaire personnalisé, vous pouvez rechercher des erreurs spécifiques liées à votre en-tête personnalisé requis et renvoyer une réponse d'erreur personnalisée.
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}), )
Une autre alternative consiste à créer des sous-applications et montage sur l'application principale. Cela permet une gestion personnalisée des erreurs spécifique aux routes au sein de la sous-application, sans affecter les autres routes dans l'application principale.
# 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)
Cette approche implique la création d'une classe APIRoute personnalisée qui gère la validation des requêtes dans un bloc try-sauf. Si une RequestValidationError est générée, une réponse d'erreur personnalisée peut être renvoyée.
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)
En explorant ces techniques, les développeurs peuvent personnaliser les réponses d'erreur dans FastAPI pour répondre à des exigences spécifiques, offrant ainsi une plus grande expérience utilisateur personnalisée et capacités améliorées de gestion des erreurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!