본문 바로가기
Fast API/fastapi배우기

Fast API 배우기 21부 - Middleware

by 붕어사랑 티스토리 2021. 11. 5.
반응형

Middleware

middleware란 모든 리퀘스트에 대해 path operation이 수행되기전 실행되는 함수를 말한다.

또한 모든 response에 대해서도 reponse를 return해 주기 전에 실행되는 함수도 middleware가 된다.

 

그니깐 프론트엔드와 백엔드 사이에서 일하는 놈이라고 생각하면 될듯

 

 

 

  • request를 파라미터로 받는다.
  • request에 대해 어떠한 작업을 할수 있다.
  • 미들웨어가 작업을 끝내고 path operation에 리퀘스트를 넘겨준다
  • 필요하면 reponse를 리턴해주기 전에도 어떤 작업을 수행할 수 있다.
  • 마지막으로 reponse를 넘겨준다.

 

 

Create a middleware

미들웨어를 만드려면 아래의 데코레이터를 사용하면 된다.

 

@app.middleware("http")

미들웨어는 다음과 같은 파라미터를 받는다.

  • request
  • call_next : 함수이고 request를 파라미터로 받는다. 
    그리고 이 함수는 request를 path operation에 넘긴다.
    마지막으로 path operation에 의한 response를 리턴한다.
  • 리턴받은 response를 유저에게 넘겨주기전에 어떠한 작업을 수행 할 수 있다.
import time

from fastapi import FastAPI, Request

app = FastAPI()



@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
    start_time = time.time()
    response = await call_next(request)
    process_time = time.time() - start_time
    response.headers["X-Process-Time"] = str(process_time)
    return response

 

 

여기서 헤더에 X- 라는 접두사가 붙어있는데 이건 custom proprietary 헤더를 의미한다.

그러나 이 커스템 해더를 클라이언트에서 보게 하려면 expose_headers매개변수에 추가하여 CORS configuration에 추가하여야 한다. 참고

 

 

위 예제에서는 request의 수행시간을 측정하여 커스텀 헤더에 넣어서 유저에 전달해주는 예제이다.

 

반응형

댓글