关于 fastapi-code-review
fastapi-code-review 是一项检查 FastAPI 代码的审查技能,涵盖路由、依赖、验证和异步处理实践。它设有验证关卡,要求报告问题前提供代码位置和依据。
主要功能
- 01检查路由与响应模型
- 02审查依赖注入
- 03检查 Pydantic 验证
- 04审查异步处理与阻塞 I/O
- 05报告问题前核实证据
适用场景
- 01审查 FastAPI 路由实现
- 02检查依赖清理模式
- 03评估验证与错误处理
- 04核实所报告的代码问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill fastapi-code-review安装后在 Claude Code 中输入/fastapi-code-review确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/async.mddependencies.mdroutes.mdvalidation.md详细介绍
FastAPI 代码审查
快速参考
| 问题类型 | 参考 |
|---|---|
| APIRouter 设置、response_model、状态码 | references/routes.md |
| Depends()、yield 依赖项、清理、共享依赖项 | references/dependencies.md |
| Pydantic 模型、HTTPException、422 处理 | references/validation.md |
| 异步处理器、阻塞 I/O、后台任务 | references/async.md |
审查清单
- APIRouter 设置了正确的前缀和标签
- 所有路由都指定了
response_model,以确保类型安全 - HTTP 方法正确(GET、POST、PUT、DELETE、PATCH)
- 状态码恰当(200、201、204、404 等)
- 依赖项使用
Depends(),而不是手动调用 - yield 依赖项进行了适当清理
- 请求/响应模型使用 Pydantic
- HTTPException 包含状态码和详细信息
- 所有路由处理器都是
async def - 没有阻塞式 I/O(
requests、time.sleep、open()) - 非阻塞操作使用后台任务
- 路由处理器中没有裸
except
有效模式(不要标记)
以下是符合 FastAPI 惯例的模式,虽然看起来可能有问题,但实际上是正确的:
- Pydantic 会自动验证请求体 - 将带类型的 Pydantic 模型用作参数时,无需手动验证
- 通过依赖注入获取数据库会话 - 会话通过
Depends()获取,而不是作为函数参数传入 - 所有 HTTP 错误都使用 HTTPException - FastAPI 会将其转换为正确的 HTTP 响应
- 没有 await 的 async def 端点 - 可能使用了同步依赖项或简单操作;FastAPI 会处理
- Depends() 上的类型注解 - 这是用于文档说明和 IDE 支持,并非类型断言
- Query/Path/Body 默认值 - FastAPI 会在运行时处理这些值,而不是将其视为传统的 Python 默认值
- 端点返回 dict - 如果设置了
response_model,Pydantic 会自动进行转换
依赖上下文的规则
仅在上下文确实适用时标记问题:
- 仅当字段未包含在带验证器的 Pydantic 模型中时,才标记缺少验证
- 仅当端点未通过带有身份验证依赖项的
Depends()进行身份验证时,才标记缺少身份验证 - 仅当错误情况下未适当地引发 HTTPException 时,才标记缺少错误处理
- 仅当操作确实会阻塞(文件 I/O、网络调用、受 CPU 限制),而不只是非异步时,才标记 async 中的同步操作
检查关卡(FastAPI 专用)
每发现一项与 FastAPI 相关的问题,都要运行一次;在能够为处理器定位 file:line 后(参见 review-verification-protocol),并且在提交问题文本之前运行。如果未满足某一步的通过条件,不要按原文断言该问题——应收集证据、撤回问题、降低严重程度,或改写为疑问。
关卡 1 — 路由装饰器和响应面
| 步骤 | 操作 | 通过条件 |
|---|---|---|
| 1a | 在仓库中打开处理器的路由装饰器(不要凭记忆判断)。 | 找到 @router.* / @app.*(或注册此处理器的位置)的 file:line。 |
| 1b | 记录该装饰器上的 HTTP 方法、response_model= 和 status_code=(或注明它们不存在)。 | 提供该行的代码片段,或在相同的 file:line 处明确注明缺失。 |
关卡 2 — 阻塞或“应该使用 async”
| 步骤 | 操作 | 通过条件 |
|---|---|---|
| 2a | 阅读完整的处理器主体。 | 提供覆盖该主体的 file:line 范围。 |
| 2b | 如果声称存在阻塞式 I/O,请指出每个阻塞调用(例如 requests.、open(、time.sleep、同步 DB/ORM)。 | 每个调用都要提供 file:line;如果阅读后发现没有阻塞调用,则撤回该问题。 |
Gate 3 — 依赖项、验证、身份验证
| 步骤 | 操作 | 通过条件 |
|---|---|---|
| 3a | 列出参数:Depends / Annotated[..., Depends]、Pydantic 模型、Body/Query/Path、Request/Response。 | 名称 + 机制,并关联到签名中的 file:line。 |
| 3b | 如果声称缺少身份验证:搜索处理程序文件(以及单独存放的 APIRouter 模块)中的 Depends、Security、HTTPBearer 或项目身份验证依赖项。 | 引用现有钩子,或提供搜索结果:已搜索的路径 + N 个匹配项(允许为零)。 |
| 3c | 如果声称缺少验证:确认参数不是 Pydantic 模型,也不是受约束的 Query/Path/Body。 | 提供 file:line 格式的类型/来源;如果验证已生效,则撤回该结论。 |
FastAPI 框架行为
FastAPI + Pydantic 会自动处理许多事项:
- 通过 Pydantic 模型验证请求
- 通过 response_model 序列化响应
- 为横切关注点注入依赖项
- 通过异常处理器处理异常
标记功能“缺失”之前,请先确认 FastAPI 是否已处理该功能。
何时加载参考资料
- 检查路由定义 → routes.md
- 检查依赖注入 → dependencies.md
- 检查 Pydantic 模型/验证 → validation.md
- 检查异步路由处理程序 → async.md
检查问题
- 所有路由是否都显式指定了响应模型和状态码?
- 是否通过 Depends() 注入依赖项,并进行了适当的清理?
- 所有 Pydantic 模型是否都能正确验证输入?
- 所有路由处理程序是否都是异步且非阻塞的?
提交问题报告前
- 对于每项与 FastAPI 相关的问题,都要完成上述 门槛(FastAPI 专属)。
- 报告任何问题之前,先加载并遵循 review-verification-protocol(报告前检查清单和按问题类型进行验证)。
评论
支持 Markdown