什麼是 Middleware?
Middleware 是請求進入路由前、回應送出前的處理層,用來統一處理跨功能邏輯。常用於請求記錄、驗證權杖、請求耗時統計,就像大樓管理室,所有人都要先經過。
Middleware 基礎應用
- 使用
@app.middleware("http")定義 HTTP 中間件,可讀寫request/response - 透過
call_next(request)將請求傳給下一個 middleware 或路由處理器,否則請求會被中斷 await call_next(request)之前的程式碼會在請求進入時執行await call_next(request) 之後的程式碼會在回應產生後執行
常見錯誤與解決方法
- 在中間件使用同步的 time.sleep() 會卡住整個伺服器,應該使用 asyncio.sleep() 或非同步函式
- 函式結尾沒寫 return response 會導致客戶端收不到回應並請求超時,請務必回傳物件
from fastapi import FastAPI, Request # 匯入 FastAPI 與 Request 物件
import time # 匯入時間模組計算處理時間
app = FastAPI() # 建立 FastAPI 應用實例
@app.middleware("http") # 註冊 HTTP 中間件
async def log_process_time(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 # 回傳最終回應
@app.get("/") # 定義一個 GET 請求的根路徑
async def read_root(): # 路徑操作函式
return {"message": "檢查 Header 看處理時間"} # 回傳 JSON 資料

















