FastAPI [1](#sources) bietet eine vielseitige Plattform zum Anpassen von Fehlerreaktionen für bestimmte Routen. Dadurch können Entwickler die Fehlerbehandlung entsprechend den spezifischen Anwendungsanforderungen anpassen. Durch Überschreiben des Standard-Ausnahmehandlers oder den Einsatz anderer Techniken wie Unteranwendungen können benutzerdefinierte Fehlerreaktionen erstellt werden, die die Benutzererfahrung verbessern und aussagekräftiges Feedback geben.
Ein Ansatz besteht darin, den Standard-Ausnahmehandler zu überschreiben für RequestValidationError. Diese Ausnahme wird ausgelöst, wenn eine Anfrage ungültige Daten enthält. Durch die Implementierung eines benutzerdefinierten Handlers können Sie nach bestimmten Fehlern im Zusammenhang mit Ihrem erforderlichen benutzerdefinierten Header suchen und eine benutzerdefinierte Fehlerantwort zurückgeben.
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}), )
Eine weitere Alternative besteht darin, Unteranwendungen zu erstellen und Montagesie an der Hauptanwendung. Dies ermöglicht eine benutzerdefinierte Fehlerbehandlung speziell für Routen innerhalb der Unteranwendung, ohne Auswirkungen auf andere Routen in der Hauptanwendung.
# 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)
Dieser Ansatz beinhaltet die Erstellung einer benutzerdefinierten APIRoute-Klasse, die die Anforderungsvalidierung innerhalb eines Try-Except-Blocks übernimmt. Wenn ein RequestValidationError ausgelöst wird, kann eine benutzerdefinierte Fehlerantwort zurückgegeben werden.
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)
Durch die Erkundung dieser Techniken können Entwickler Fehlerantworten in FastAPI an spezifische Anforderungen anpassen und so mehr bieten Maßgeschneiderte Benutzererfahrung und verbesserte Fehlerbehandlungsfunktionen.
Das obige ist der detaillierte Inhalt vonWie kann ich Fehlerantworten für bestimmte Routen in FastAPI anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!