Dalam FastAPI, menaikkan RequestValidationError membolehkan anda menghantar respons ralat tersuai. Ini berguna untuk titik akhir yang memerlukan syarat khusus untuk dipenuhi, seperti Pengepala yang diperlukan.
Pilihan ini membolehkan anda mengatasi pengendali pengecualian lalai untuk RequestValidationError, membolehkan anda menyesuaikan respons Ralat.
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}), )
Mencipta sub-aplikasi membolehkan anda mencipta tika API berasingan dengan pengendali pengecualiannya sendiri. Ini membolehkan anda menyesuaikan pengendalian ralat khusus untuk sub-aplikasi.
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)
Kaedah ini membolehkan anda menukar gelagat laluan tertentu dengan menggunakan kelas APIRoute tersuai.
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)
Pilihan 1 ialah mudah untuk dilaksanakan apabila anda hanya perlu menyesuaikan respons ralat untuk laluan tertentu. Pilihan 2 sesuai apabila anda mahukan lebih kawalan ke atas subkawasan API anda, seperti menggunakan dasar keselamatan yang berbeza atau pengendalian pengecualian. Pilihan 3 memberi anda lebih kawalan ke atas laluan individu dan berguna untuk mengendalikan kes tertentu dalam laluan.
Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan Respons Ralat untuk Laluan FastAPI Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!