Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich Fehlerantworten für bestimmte Routen in FastAPI anpassen?

Wie kann ich Fehlerantworten für bestimmte Routen in FastAPI anpassen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-22 16:18:20149Durchsuche

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

Anpassen von Fehlerantworten für bestimmte Routen in FastAPI

Übersicht

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.

Option 1: Standard-Ausnahmehandler überschreiben

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}),
    )

Option 2: Sub -Anwendungen

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)

Option 3: Benutzerdefinierte APIRoute-Klasse

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)

Fazit

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.

Quellen

  1. [FastAPI-Dokumentation: Umgang mit HTTP-Ausnahmen](https://fastapi.tiangolo.com/Exception-handlers/)

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn