Skip to content

36. Middleware


1. Middleware

  • FastAPI 애플리케이션에 middleware를 추가할 수 있다.
  • "middleware"는 다음과 같이 특정 path operation에 의해 처리되기 전에 모든 request와 함께 작동하고, 반환하기 전에 모든 response와 함께 작동하는 함수이다.


1] 애플리케이션에 오는 각각의 request가 필요하다.

2] 해당 request에 대해 작업을 수행하거나 필요한 코드를 실행한다.

3] 애플리케이션의 나머지 부분에서 처리할 request를 전달한다.

4] 애플리케이션에서 생성한 response를 가져온다.

5] 해당 response에 대해 작업을 수행하거나 필요한 코드를 실행한다.

6] response를 반환한다.


2. Create a middleware

  • middleware를 생성하려면 함수에 데코레이터 @app.middleware("http")를 사용한다.
  • middleware 함수는 다음을 수신한다.


1] request

2] 매개변수로 request를 받는 call_next 함수

  • 이 함수는 해당 path operation에 request를 전달한다.
  • 그런 다음 해당 paht operation에 의해 생성된 response를 반환한다.

3] 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


1) Before and after the response

  • path operation에서 request를 받기 전에 request와 함께 실행할 코드를 추가할 수 있다.
  • 또한 response가 생성된 후 반환하기 전에도 코드를 추가할 수 있다.


  • 다음과 같이 request를 처리하고 response를 생성하는 데 걸린 시간을 포함하는 사용자 정의 header X-Process-Time을 추가할 수 있다.


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

References