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