fastapi에는 spring의 Interceptor와 같이 api호출 후 전/후처리를 할 수 있는 기능이 있습니다.
middleware를 적용하면 되는데
먼저 middleware/middleware.py를 생성해줍니다
from fastapi import Request
from chatterbot.utils import get_logger
import time
logger = get_logger(__name__)
class Middleware:
def __init__(
self,
some_attribute: str,
):
self.some_attribute = some_attribute
async def __call__(self, request: Request, call_next):
logger.debug("")
logger.debug(" ******************** start ******************** ")
logger.debug(" ***** request path : {} ".format(request.url.path))
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
response.headers["X-Process-Time"] = str(process_time)
logger.debug(" ***** process_time : {} ".format(process_time))
logger.debug(" ******************** end ******************** ")
logger.debug("")
return response
소스코드를 보시면 __call__함수가 있고, 그 안에서
1. start_time 찍기
2. call_nest(request)호출
3. process_time찍기
순으로 실행을 하는데 이 과정을거쳐서 호출된 요청의 process_time을 찍을 수 있습니다.
await call_nest(reques)로 사용자가 요청하기 전에 전처리를 하고
응답값을 받아온 후에 후처리를 로직을 넣어서 구서을 하시면 됩니다.
이렇게 작성한 middleware를 router에 add해야하는데
main.py 소스에 아래부분을 추가하면 됩니다.
from middleware.middleware import Middleware
from starlette.middleware.base import BaseHTTPMiddleware
app = FastAPI()
middleware = Middleware(some_attribute="some_attribute_here_if_needed")
app.add_middleware(BaseHTTPMiddleware, dispatch=middleware)
'Python' 카테고리의 다른 글
파이썬으로 웹크롤링하기 - BeautifulSoup (0) | 2022.11.11 |
---|---|
버전 관리하기 - semver 패키지 (0) | 2022.10.27 |
python - requirements.txt 파일 생성하기(freeze) 및 설치하기 (0) | 2022.08.14 |
python웹 프레임워크 - FastAPI(1) (0) | 2022.07.29 |
파이썬 ORM [SQLAlchemy] - 2(SqlAlchemy QueuePool) (0) | 2022.07.27 |