1. 基础用法
1 | from fastapi import Depends, FastAPI, Header, HTTPException |
- 通过路径操作装饰器的
dependencies参数声明依赖项列表 - 依赖项执行流程:
graph TD A[客户端请求] --> B[执行verify_token] B --> C{验证通过?} C -->|是| D[执行read_items] C -->|否| E[返回400错误] - 特点:
- 即使依赖项有返回值,也不会传递给路径操作函数
- 多个依赖项按声明顺序执行
2. 参数配置技巧
1 |
|
use_cache=False禁用依赖项缓存,强制每次重新执行- 支持混合使用带返回值和不返回值的依赖项
- 依赖项可包含子依赖项,形成多层验证链
3. 错误处理机制
1 | async def verify_key(x_key: str = Header()): |
- 依赖项抛出HTTPException时会直接终止请求
- 错误响应格式与普通路径操作一致:
1
2
3{
"detail": "X-Key header invalid"
} - 支持OpenAPI文档自动生成错误响应描述
4. 生产环境最佳实践
1 | def rate_limiter(redis: Redis = Depends(get_redis)): |
- 典型应用场景:
- API速率限制
- 请求签名验证
- 权限预检查
- 推荐与全局依赖项配合使用(
app = FastAPI(dependencies=[]))形成多层防护
5. 与全局依赖项对比
| 特性 | 路径装饰器依赖项 | 全局依赖项 |
|---|---|---|
| 作用范围 | 单路径操作 | 整个应用 |
| 执行顺序 | 全局依赖之后执行 | 最先执行 |
| 典型用途 | 细粒度权限控制 | 通用身份认证 |
| 性能影响 | 按需加载更灵活 | 全局生效可能增加开销 |
| 维护成本 | 分散在各路由 | 集中管理 |