用途
这套技能面向 AI 智能体与大语言模型,提供 FastAPI 后端的最佳实践规则,目标是让生成的 Web 应用在安全性、并发正确性和可测试性上符合要求。所有示例共享一个发票(invoice)应用,模型定义在 db-sqlalchemy-2-style,设置定义在 config-typed-settings,应用创建在 app-factory-lifespan,其余规则只展示所讨论的部分。在某个领域编写代码前,应先完整阅读对应规则文件。
技术栈假设
规则假定使用同一套技术栈:FastAPI、SQLAlchemy 2.0(异步)、Alembic、Pydantic v2 与 pydantic-settings、httpx、PyJWT、pwdlib。示例使用异步栈;同样的规则也适用于使用 Session 的同步 def 端点。Django 与 Flask 不在范围内。当某条规则与编码标准或测试规则重叠时,在网络应用代码中以本技能为准。
主要能力(按分类)
安全(CRITICAL)
- sec-password-hashing:使用 Argon2 哈希密码。
- sec-secure-tokens:用 secrets 生成令牌,并以常量时间比较。
- sec-jwt-validation:以固定算法和必需声明校验 JWT。
- sec-object-authorization:不仅授权端点,还要授权对每个对象的访问。
- sec-cors-origins:显式列出允许的 CORS 来源。
数据库(CRITICAL)
- db-parameterized-queries:绝不用字符串格式化构建 SQL。
- db-session-per-request:引擎只创建一次,每个请求创建一个会话。
- db-transaction-boundary:每个用例提交一次,不在辅助函数或依赖清理中提交。
- db-eager-loading:显式加载关系,并让懒加载抛出异常。
- db-migrations-alembic:用 Alembic 迁移修改 schema。
- db-sqlalchemy-2-style:使用 SQLAlchemy 2.0 类型化模型与 select()。
异步 I/O(CRITICAL)
- async-no-blocking-calls:在 async def 端点中绝不阻塞事件循环。
- async-shared-http-client:共享一个带显式超时的 httpx.AsyncClient。
API 设计(HIGH)
- api-separate-schemas:请求与响应模型同 ORM 模型分离。
- api-error-responses:在异常处理器中把领域错误映射为 HTTP 响应。
- api-bounded-lists:每个列表端点都要有边界并分页。
配置(HIGH)
- config-typed-settings:启动时将配置加载到类型化设置对象,配置错误应在启动时暴露而非首个请求时。
应用结构(HIGH)
- app-factory-lifespan:在工厂中构建应用,并在 lifespan 中管理资源。
- app-thin-routes:保持路由函数精简,用 Annotated 注入依赖。
可观测性(MEDIUM)
- obs-request-id-logging:用请求 ID 关联日志,使每个请求可追踪。
测试(MEDIUM)
- test-dependency-overrides:用 dependency_overrides 测试端点,而不是打补丁。
- test-db-rollback:针对真实数据库在可回滚事务中运行测试。
使用方式
按领域查阅并遵循规则文件。示例展示:用 create_app 工厂配合 lifespan 创建异步引擎与 httpx.AsyncClient,将会话工厂和客户端挂到 app.state;用 get_session 依赖按请求提供会话且不在其中提交;用 select() 查询并按 owner_id 限定范围、用 selectinload 预加载、关系声明 lazy="raise";用 pwdlib 的 Argon2id 哈希密码并在 to_thread 中执行;用 PyJWT 固定算法并校验 aud、iss 及必需声明;用 secrets.token_urlsafe 生成重置令牌且只存其 SHA-256 哈希;用 hmac.compare_digest 做常量时间比较;用 Pydantic Settings 加载配置并显式配置 CORS;测试中用连接级事务加 savepoint 回滚数据库,并用 ASGITransport 与 dependency_overrides 构造测试客户端。
适用场景
适用于使用上述技术栈构建 FastAPI 后端的开发与代码生成,尤其是需要安全认证授权、事务与并发正确性、显式数据加载、类型化配置和可回滚测试的场景。
限制
Django 与 Flask 不在范围内;异步示例之外仅说明同步 def 端点可沿用相同规则。资料未提供价格、平台支持、依赖安装命令及规则的完整逐条正文,相关细节暂未提供。