FastAPI에서 RequestValidationError를 발생시키면 사용자 정의 오류 응답을 보낼 수 있습니다. 이는 필수 헤더와 같이 특정 조건을 충족해야 하는 엔드포인트에 유용합니다.
이 옵션을 사용하면 기본 예외 처리기를 재정의할 수 있습니다. RequestValidationError를 사용하면 오류 응답을 사용자 정의할 수 있습니다.
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}), )
하위 애플리케이션을 생성하면 자체 예외 처리기를 사용하여 별도의 API 인스턴스를 생성할 수 있습니다. 이를 통해 하위 애플리케이션에 대한 오류 처리를 구체적으로 사용자 정의할 수 있습니다.
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)
이 방법을 사용하면 특정 경로의 동작을 변경할 수 있습니다. 사용자 정의 APIRoute 클래스를 사용합니다.
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)
옵션 1은 특정 경로에 대한 오류 응답을 사용자 정의해야 하는 경우에만 구현하기 쉽습니다. 옵션 2는 다양한 보안 정책 적용이나 예외 처리 등 API의 하위 영역을 더 효과적으로 제어하려는 경우에 적합합니다. 옵션 3을 사용하면 개별 경로를 더욱 효과적으로 제어할 수 있으며 경로 내의 특정 사례를 처리하는 데 유용합니다.
위 내용은 특정 FastAPI 경로에 대한 오류 응답을 사용자 정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!