Python FastAPI에서 원시 HTTP 요청/응답을 기록하는 방법
FastAPI는 원시 HTTP 요청 및 응답을 캡처하고 기록하는 여러 가지 방법을 제공합니다. 특정 요구 사항 및 성능 고려 사항을 충족합니다.
옵션 1: 미들웨어
미들웨어를 사용하면 요청과 응답을 가로채서 처리할 수 있습니다. 스트림의 요청 본문을 사용하고 이를 저장하는 미들웨어를 생성할 수 있습니다. 응답 본문의 경우 이를 바이트 객체로 읽고 사용자 정의 응답을 반환합니다. 응답 시간에 영향을 주지 않도록 BackgroundTask를 사용하여 데이터를 비동기식으로 기록합니다.
예:
async def some_middleware(request: Request, call_next): req_body = await request.body() response = await call_next(request) res_body = b'' async for chunk in response.body_iterator: res_body += chunk task = BackgroundTask(log_info, req_body, res_body) return Response(content=res_body, background=task)
옵션 2: 사용자 정의 APIRoute 클래스
요청 및 응답 본문을 조작하기 위한 사용자 정의 APIRoute 클래스를 만듭니다. 이 접근 방식을 사용하면 APIRouter에 정의된 특정 경로로 로깅을 제한할 수 있습니다.
예:
class LoggingRoute(APIRoute): async def custom_route_handler(request: Request) -> Response: req_body = await request.body() response = await original_route_handler(request) res_body = b'' async for item in response.body_iterator: res_body += item task = BackgroundTask(log_info, req_body, res_body) response = Response(content=res_body, background=task) return response
대용량 요청/응답 본문을 저장할 때의 제한 사항을 고려하세요. 메모리를 사용하고 BackgroundTask를 사용하여 요청 처리 차단을 방지합니다. 필요한 경우 로깅을 특정 경로로 제한하거나 스트리밍 응답을 반환하는 엔드포인트를 제외하세요.
위 내용은 Python FastAPI에서 원시 HTTP 요청 및 응답을 기록하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!