1.基础扩展方法
1 | from fastapi import FastAPI |
- 通过覆盖
app.openapi方法实现文档生成逻辑自定义 - 使用
get_openapi工具函数生成基础文档结构,支持参数:title:文档标题(必填)version:API版本号(必填)routes:路由列表(自动从app.routes获取)description:详细描述文本(可选)
- 流程图展示生成流程:
graph TD A[请求/openapi.json] --> B{是否缓存存在?} B -->|是| C[返回缓存文档] B -->|否| D[调用get_openapi生成] D --> E[添加自定义扩展] E --> F[缓存文档] F --> G[返回生成文档]
2.高级配置技巧
2.1 操作标识符定制
1 | from fastapi.routing import APIRoute |
- 将路由函数名作为operationId,提升客户端生成代码可读性
- 需确保所有路径操作函数名称全局唯一
2.2 接口文档排除
1 |
|
- 使用
include_in_schema=False隐藏敏感接口文档 - 适用于监控端点、内部调试接口等场景
3.生产环境建议
缓存机制:
- 通过
app.openapi_schema属性实现单例缓存,避免重复生成开销 - 开发环境可禁用缓存实时查看文档变更
- 通过
安全配置:
1
2
3
4class Settings(BaseSettings):
docs_enabled: bool = False
app = FastAPI(docs_url="/docs" if settings.docs_enabled else None)通过环境变量动态控制文档访问权限
版本管理:
- 使用
info.x-api-version扩展字段标注接口版本 - 配合
servers配置实现多版本API共存
- 使用
性能监控:
1
2
3
4openapi_schema["paths"]["/items/"]["get"]["x-ratelimit"] = {
"limit": 100,
"period": "1m"
}在OpenAPI中直接声明接口限流策略
完整实现参考:
FastAPI官方扩展OpenAPI文档
测试命令示例:
1
2
3
4
5 # 查看自定义文档
curl http://localhost:8000/openapi.json | jq .info
# 禁用文档访问
DOCS_ENABLED=false uvicorn main:app