mcpField
F
fastapi-code-review

fastapi-code-review

github.com/existential-birds测试与质量85382 次安装11 周前更新
代码仓库

关于 fastapi-code-review

fastapi-code-review 是一项检查 FastAPI 代码的审查技能,涵盖路由、依赖、验证和异步处理实践。它设有验证关卡,要求报告问题前提供代码位置和依据。

主要功能

  1. 01检查路由与响应模型
  2. 02审查依赖注入
  3. 03检查 Pydantic 验证
  4. 04审查异步处理与阻塞 I/O
  5. 05报告问题前核实证据

适用场景

  1. 01审查 FastAPI 路由实现
  2. 02检查依赖清理模式
  3. 03评估验证与错误处理
  4. 04核实所报告的代码问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/existential-birds/beagle --skill fastapi-code-review

安装后在 Claude Code 中输入/fastapi-code-review确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
async.md
dependencies.md
routes.md
validation.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

检查问题

  1. 所有路由是否都显式指定了响应模型和状态码?
  2. 是否通过 Depends() 注入依赖项,并进行了适当的清理?
  3. 所有 Pydantic 模型是否都能正确验证输入?
  4. 所有路由处理程序是否都是异步且非阻塞的?

提交问题报告前

  1. 对于每项与 FastAPI 相关的问题,都要完成上述 门槛(FastAPI 专属)。
  2. 报告任何问题之前,先加载并遵循 review-verification-protocol(报告前检查清单和按问题类型进行验证)。

评论

支持 Markdown