跳转至

FastAPI 规则

在 FastAPI 项目中,请将这些规则与通用 Python 规则一起使用。

结构

  • 将应用构建放在 create_app() 中。
  • 保持路由器轻量;将持久化和业务逻辑移到服务或 CRUD 辅助函数中。
  • 分离请求模式、更新模式和响应模式。
  • 将数据库会话和认证放在依赖项中。

异步

  • 对执行 I/O 的端点使用 async def。
  • 在异步端点中使用异步数据库客户端和 HTTP 客户端。
  • 不要在异步路由中调用 requests、同步 SQLAlchemy 会话或阻塞文件/网络操作。

依赖注入

@router.get("/users/{user_id}")
async def get_user(
    user_id: str,
    db: AsyncSession = Depends(get_db),
    current_user: User = Depends(get_current_user),
):
    ...

不要在路由处理程序中创建 SessionLocal() 或长生命周期客户端。

模式

  • 不要在响应模型中包含密码、密码哈希、访问 Token、刷新 Token 或内部认证状态。
  • 对返回应用程序数据的端点使用 response_model。
  • 在可以用 Pydantic 表达规则时,使用字段约束而不是手写验证。

安全

  • 将 CORS 源设置为环境特定值。
  • 不要将通配符源与带凭据的 CORS 组合使用。
  • 验证 JWT 的有效期、签发者、受众和算法。
  • 对认证端点和高写入负载端点应用速率限制。
  • 从日志中移除凭据、Cookie、Authorization 头和 Token。

测试

  • 覆盖 Depends 使用的确切依赖项。
  • 测试后清除 app.dependency_overrides。
  • 对异步应用优先使用异步测试客户端。

技能:请参阅 fastapi-patterns。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC