1015 字
3 分钟
FastAPIfastapi
FastAPI 组织逻辑:Depends、yield、错误处理与安全起步

从 Depends 开始,把共享逻辑、yield 资源清理、HTTPException、自定义异常处理和 OAuth2PasswordBearer 串成一层。

前面几篇主要在搭"接口表层"。到了这里,FastAPI 开始真正长出工程味:共享逻辑、资源生命周期、认证入口和错误通道都在这一层。

1. Depends 在干什么#

官方把依赖项单独拆成一章,这一章非常关键,因为 FastAPI 的很多高级能力都站在它上面。

Python3 点击展开代码
18 lines 展开代码

这里可以直接把依赖注入理解成:

  • 路径函数声明"我需要什么"
  • FastAPI 负责先把这段逻辑跑完
  • 再把结果注进来

它最值的地方在于复用:

  • 共享查询参数
  • 共享数据库会话
  • 共享认证逻辑

2. Depends 里传的其实是可调用对象#

官方文档明确提到,Depends() 里只接受一个参数,而且这个参数必须是可调用对象。你不需要自己加括号去调用它,FastAPI 会负责调用。
来源:Dependencies 官方页 https://fastapi.tiangolo.com/zh/tutorial/dependencies/

所以依赖不一定非得是函数,也可以是类。

Python3 点击展开代码
18 lines 展开代码

这类写法的优势主要在于:

  • 编辑器补全更自然
  • 组织多参数依赖时更清楚

3. 子依赖和依赖缓存#

依赖还可以继续依赖别的依赖:

Python3 点击展开代码
24 lines 展开代码

而且同一个请求里,FastAPI 不会重复计算同一个依赖结果,而是会缓存并复用。

4. 装饰器依赖和全局依赖#

有些依赖不是为了把值注入进函数,而是为了让某个检查逻辑在进入路由前一定执行。这时可以放到装饰器上:

Python3 点击展开代码
14 lines 展开代码

如果整个应用都需要某个依赖,也可以直接写到 FastAPI(...) 上。

5. yield 依赖:提供资源,也负责回收资源#

你本地 19.md 这部分其实已经抓到重点了:yield 依赖不是返回一个值然后结束,而是先把值交出去,等请求处理完,再回来执行清理逻辑。

Python3 点击展开代码
6 lines 展开代码

可以直接把它理解成:

  • yield 前:准备资源
  • yield 出去:把资源交给路径函数
  • yield 后:做清理

最典型的场景就是数据库会话、文件句柄、临时连接。

6. 为什么 try/finally 总和 yield 一起出现#

因为 finally 能保证:

  • 即使中间抛异常
  • 即使路径函数失败
  • 清理逻辑也最终会执行

这一点在资源管理里很重要,不然连接和会话很容易泄漏。

7. 错误处理:先从 HTTPException 开始#

Python3 点击展开代码
12 lines 展开代码

这是 FastAPI 最常见的错误出口。

如果只记一个点,那就是:

  • raise HTTPException(...)

比手写响应对象更像"真正的错误通道"。

8. 自定义异常处理器#

Python3 点击展开代码
18 lines 展开代码

这一步意味着错误处理开始从"单个路由里的 if 判断"升级成"全局错误策略"。

9. 处理校验错误:RequestValidationError#

当客户端输入数据不合法时,FastAPI 内部会抛出 RequestValidationError。这类错误也可以被接管:

Python3 点击展开代码
19 lines 展开代码

官方还特别提到一个细节:

  • 业务里抛错用 FastAPI 的 HTTPException
  • 但注册异常处理器时,更适合注册 Starlette 的 HTTPException

因为这样连 Starlette 内部抛出的同类错误也能一起接住。
来源:Handling Errors 官方页 https://fastapi.tiangolo.com/zh/tutorial/handling-errors/

10. 安全起步:OAuth2PasswordBearer#

安全入门那一页最值得先记住的不是完整 OAuth2 流程,而是:

  • FastAPI 把认证入口也做成了依赖
Python3 点击展开代码
11 lines 展开代码

这里的 tokenUrl="token" 指向的是相对路径 ./token,官方文档里专门解释了这一点。
来源:Security First Steps 官方页 https://fastapi.tiangolo.com/zh/tutorial/security/first-steps/

一旦加上它,/docs 右上角就会出现 Authorize 按钮,交互文档会自动进入"可以带认证信息调试"的状态。

这一页最重要的意义,不是立刻把认证做完,而是先意识到:

  • 安全在 FastAPI 里不是"外挂"
  • 而是沿着依赖注入系统自然长出来的

专题阅读

FastAPI

这篇文章属于同一条阅读链。你可以直接在这里切换,不用再回到列表页重新找。

当前进度8 / 11

留言区

留言

欢迎纠错、补充、交流。昵称和评论内容必填;如果你愿意,也可以留下联系方式,仅站主可见。

0

正在加载评论...

0 / 2000

阅读导航

文章目录

当前阅读位置将在这里显示

0 节