FastAPI [1](#sources)는 다용도 플랫폼 사용자 정의 오류 특정 경로에 대한 응답. 이를 통해 개발자는 특정 애플리케이션 요구 사항에 따라 오류 처리를 맞춤할 수 있습니다. 기본 예외 처리기를 재정의하거나 하위 애플리케이션과 같은 다른 기술을 사용하면 사용자 경험을 향상하고 의미 있는 피드백을 제공하는 사용자 정의 오류 응답을 만들 수 있습니다.
한 가지 접근 방식은 RequestValidationError에 대해 기본 예외 처리기를 재정의하는 것입니다. 이 예외는 요청에 잘못된 데이터가 포함된 경우 발생합니다. 사용자 정의 핸들러를 구현하면 필수 사용자 정의 헤더와 관련된 특정 오류를 확인하고 사용자 정의 오류 응답을 반환할 수 있습니다.
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}), )
또 다른 대안은 하위 애플리케이션 생성과 기본 애플리케이션에 마운트합니다. 이를 통해 기본 애플리케이션의 다른 경로에 영향을 주지 않고 하위 애플리케이션 내의 경로에 특정한 사용자 정의 오류 처리가 가능합니다.
# 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)
이 접근 방식에는 try-Exception 블록 내에서 요청 검증을 처리하는 사용자 정의 APIRoute 클래스를 생성하는 작업이 포함됩니다. RequestValidationError가 발생하면 사용자 정의 오류 응답이 반환될 수 있습니다.
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)
이러한 기술을 탐색함으로써 개발자는 특정 요구 사항에 맞게 FastAPI의 오류 응답을 사용자 정의하여 더 많은 기능을 제공할 수 있습니다. 맞춤형 사용자 경험 및 향상된 오류 처리 기능.
위 내용은 FastAPI의 특정 경로에 대한 오류 응답을 어떻게 사용자 정의할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!