558 字
1 分钟
FastAPIfastapi
FastAPI Bigger Applications:APIRouter、多文件应用与生命周期
当单文件应用开始变大,把 APIRouter、include_router、多文件结构和 lifespan 放到同一条工程化路径里看。
FastAPI 的前面几章都还能在一个文件里完成,但一旦路由、依赖和安全逻辑变多,问题就会从"会不会写"变成"怎么组织"。
1. APIRouter 解决的不是功能,而是组织
APIRouter 不是另一个小型 FastAPI,它更像"可组合的路由组"。
官方 Bigger Applications 页里最值得留下来的直觉是:
- 应用不是只有一个
app - 路由可以先在各自模块里组织好
- 最后再由主应用统一挂载
2. 最常见的多文件结构
这类结构是最典型的起点:
app/├── __init__.py├── main.py├── dependencies.py└── routers/ ├── __init__.py ├── items.py └── users.py这里的分层已经很清楚:
main.py:组装应用routers/:各业务路由dependencies.py:共享依赖
3. 在路由模块里定义 APIRouter
Python3
点击展开代码
展开代码
这一层最重要的点是:
prefixtagsdependenciesresponses
都可以直接挂在 APIRouter 上,而不用在每个路径操作里重复写。
4. 在主应用里 include_router
Python3
点击展开代码
展开代码
官方文档里这段很有代表性,因为它说明:
- 路由模块本身可以保持通用
- 应用层再决定怎么挂载它
include_router()时还能继续补prefix、tags、dependencies、responses
来源:Bigger Applications 官方页 https://fastapi.tiangolo.com/zh/tutorial/bigger-applications/
5. 这样组织的真正好处
这不是为了"目录看起来整齐",而是为了几件更实在的事:
- 共享路由模块更容易
- 共享依赖逻辑更自然
- 主应用装配时灵活度更高
/docs里的标签分组也更清楚
6. lifespan:把应用级初始化和清理写成一对
如果有些资源应该在应用启动时加载、关闭时释放,FastAPI 现在更推荐用 lifespan。
Python3
点击展开代码
展开代码
官方文档明确写到:
yield之前在应用启动前执行yield之后在应用结束时清理
来源:Lifespan 官方页 https://fastapi.tiangolo.com/zh/advanced/events/
7. lifespan 和依赖里的 yield 有什么不同
它们都用到了 yield,但层级不一样:
- 依赖里的
yield:围绕一次请求 lifespan:围绕整个应用生命周期
所以适合放在 lifespan 里的,通常是:
- 模型预加载
- 全局连接池初始化
- 应用级缓存
而数据库 session 这种更短命的资源,还是更适合放依赖里。
专题阅读
FastAPI
这篇文章属于同一条阅读链。你可以直接在这里切换,不用再回到列表页重新找。
当前进度9 / 11
01
FastAPI 学习路线图:把教程式切分重新排成一条主线
更新于 2026-04-03
02FastAPI 起步:应用入口、fastapi dev、entrypoint 与 uvicorn
更新于 2026-04-02
03FastAPI 输入基础:路径参数与查询参数
更新于 2026-04-01
04FastAPI 请求体:Pydantic 模型、多参数与嵌套结构
更新于 2026-03-31
05FastAPI 参数校验:Query、Path、Body、Cookie、Header
更新于 2026-03-30
06FastAPI 输出层:响应模型、状态码与数据更新
更新于 2026-03-29
07FastAPI 请求编码切换:表单、文件上传与 UploadFile
更新于 2026-03-28
08FastAPI 组织逻辑:Depends、yield、错误处理与安全起步
更新于 2026-03-27
09FastAPI Bigger Applications:APIRouter、多文件应用与生命周期
更新于 2026-03-26
当前
10FastAPI 扩展层:中间件、CORS 与后台任务
更新于 2026-03-25
11FastAPI 验证与运行:Testing、CLI、Uvicorn 与 Workers
更新于 2026-03-24
部分信息可能已经过时
留言区
留言
欢迎纠错、补充、交流。昵称和评论内容必填;如果你愿意,也可以留下联系方式,仅站主可见。