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

Susan Sarandon
Freigeben: 2024-11-24 09:59:15
Original
283 Leute haben es durchsucht

How to Customize Error Responses for Specific FastAPI Routes?

So passen Sie die Fehlerantwort für eine bestimmte Route in FastAPI an

In FastAPI können Sie durch Auslösen eines RequestValidationError eine benutzerdefinierte Fehlerantwort senden. Dies ist nützlich für Endpunkte, die die Erfüllung bestimmter Bedingungen erfordern, z. B. eines erforderlichen Headers.

Option 1: Standard-Ausnahmehandler überschreiben

Mit dieser Option können Sie den Standard-Ausnahmehandler für überschreiben RequestValidationError, mit dem Sie die Fehlerantwort anpassen können.

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}),
    )
Nach dem Login kopieren

Option 2: Verwenden Sie a Unteranwendung

Durch das Erstellen einer Unteranwendung können Sie eine separate API-Instanz mit einem eigenen Ausnahmehandler erstellen. Dadurch können Sie die Fehlerbehandlung speziell für die Unteranwendung anpassen.

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)
Nach dem Login kopieren

Option 3: Verwenden Sie eine benutzerdefinierte APIRoute-Klasse

Mit dieser Methode können Sie das Verhalten einer bestimmten Route ändern durch die Verwendung einer benutzerdefinierten APIRoute-Klasse.

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)
Nach dem Login kopieren

Welche Option sollten Sie verwenden?

Option 1 ist wann einfach zu implementieren Sie müssen die Fehlerreaktion nur für bestimmte Routen anpassen. Option 2 eignet sich, wenn Sie mehr Kontrolle über den Teilbereich Ihrer API wünschen, beispielsweise die Anwendung verschiedener Sicherheitsrichtlinien oder die Ausnahmebehandlung. Option 3 gibt Ihnen mehr Kontrolle über einzelne Routen und ist nützlich für die Bearbeitung spezifischer Fälle innerhalb einer Route.

Das obige ist der detaillierte Inhalt vonWie kann ich Fehlerantworten für bestimmte FastAPI-Routen anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage