共计 1144 个字符,预计需要花费 3 分钟才能阅读完成。
中间件(Middleware)是介于请求和响应之间的一层,用于对请求 / 响应进行统一处理,例如记录日志、处理跨域、验证 token 等。在 FastAPI 中,中间件使用十分简洁。
一、定义中间件
FastAPI 使用 @app.middleware("http") 装饰器定义中间件函数。
例如:记录每个请求耗时的中间件
import time
from fastapi import Request
@app.middleware("http")
async def log_request_time(request: Request, call_next):
start_time = time.time()
response = await call_next(request)
duration = time.time() - start_time
print(f"{request.method} {request.url.path} completed in {duration:.4f}s")
return response
二、中间件的典型用途
- 请求日志记录
- 请求限流
- 跨域处理(CORS)
- JWT 验证
- 性能监控
- 接口缓存
三、内置中间件:跨域处理(CORS)
FastAPI 提供了 CORSMiddleware
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
四、添加多个中间件的顺序
添加中间件是有顺序的,先添加的中间件会包裹后添加的中间件。
五、中间件与依赖的区别
- 中间件影响所有请求(全局)
- 依赖项只能绑定在特定路径 / 路由上
- 中间件适合处理全局需求,如日志、跨域、统一异常等
六、中间件中的异常处理
@app.middleware("http")
async def custom_error_handler(request: Request, call_next):
try:
response = await call_next(request)
return response
except Exception as e:
return JSONResponse(status_code=500, content={"detail": "Server Error"})
七、中间件 VS 路由依赖 VS 事件
| 场景 | 建议方案 |
|---|---|
| 请求预处理 | 中间件 |
| 某些路由统一依赖 | 路由依赖项 |
| 应用启动 / 关闭 | 事件处理器 |
八、总结
FastAPI 中间件提供了极其简洁灵活的方式处理跨请求逻辑。合理利用中间件可以增强项目的统一性与可维护性。下一节将介绍如何处理全局异常与自定义错误响应。
正文完