FastAPI 开发最佳实践。包含架构设计、分层架构、项目结构、异步模式、依赖注入、数据验证、数据库集成、错误处理、测试、部署等完整开发周期。 触发场景: - 架构设计、需求分析、技术选型、数据库设计、表设计 - 创建 FastAPI 端点、路由、REST API 设计 - SQLAlchemy 2.0 异步数据库操作、事务管理、Alembic 迁移 - ORM 基类设计、UUIDv7 主键、软删除、时间戳字段 - 审计日志、操作追踪、变更历史、contextvars - Pydantic v2 模型验证、序列化、ConfigDict 配置 - 中间件配置、CORS、请求日志、GZip 压缩 - 认证授权、OAuth2、JWT、权限控制 - 错误处理体系、自定义异常、统一响应格式 - 后台任务、任务队列(ARQ、Celery)、定时任务(APScheduler) - 日志配置、Loguru 两阶段初始化 - pytest 异步测试、依赖覆盖、fixture - httpx 异步 HTTP 客户端集成 - Docker 部署、Kubernetes、生产配置 - 性能优化、缓存、连接池 关键词:设计、架构、需求、技术选型、实现端点、创建 API、CRUD 操作、Pydantic schema、SQLAlchemy 模型、异步数据库、错误处理、编写测试、FastAPI 中间件、JWT 认证、部署配置、lifespan、依赖注入、后台任务、定时任务、任务队列、软删除、审计日志、UUIDv7、基类、Mixin 不适用:Django、Flask、Tornado 等其他 Python Web 框架
/plugin marketplace add qufeng33/agents/plugin install fastapi-dev@nightx-agentsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
assets/README.md.templateassets/modular-api/app/__init__.pyassets/modular-api/app/api/__init__.pyassets/modular-api/app/api/v1/__init__.pyassets/modular-api/app/api/v1/router.pyassets/modular-api/app/config.pyassets/modular-api/app/core/__init__.pyassets/modular-api/app/core/audit.pyassets/modular-api/app/core/context.pyassets/modular-api/app/core/database.pyassets/modular-api/app/core/error_codes.pyassets/modular-api/app/core/exception_handlers.pyassets/modular-api/app/core/exceptions.pyassets/modular-api/app/core/logging.pyassets/modular-api/app/core/middlewares.pyassets/modular-api/app/core/routers.pyassets/modular-api/app/core/security.pyassets/modular-api/app/dependencies.pyassets/modular-api/app/main.pyassets/modular-api/app/modules/__init__.py要求: FastAPI ≥0.122.0 | Python ≥3.13 | Pydantic ≥2.10
async defAnnotated 声明依赖Router (HTTP 层) → Service (业务逻辑层) → Repository (数据访问层) → Database
| 层 | 职责 | 不应该做 |
|---|---|---|
| Router | HTTP 处理、参数验证、响应格式 | 写 SQL、业务逻辑 |
| Service | 业务逻辑、事务编排、跨模块协调 | 直接操作数据库(简化结构例外) |
| Repository | 数据访问、SQL 查询、ORM 操作 | 处理 HTTP、业务规则、调用 commit |
注意 - 事务约定:一个请求 = 一个事务。
get_db()依赖统一管理 commit/rollback,Repository 只用flush()。
好处:可测试(mock Repository)、可替换(切换数据库)、职责清晰、代码复用
详见 分层架构
| 场景 | 推荐结构 |
|---|---|
| 小项目 / 原型 / 单人开发 | 简单结构(按层组织) |
| 团队开发 / 中大型项目 | 模块化结构(按领域组织) |
说明:
user是数据库保留字,示例统一使用表名app_user、API 路径/users。
{project}/
├── app/
│ ├── main.py # 应用入口
│ ├── config.py # 配置管理
│ ├── dependencies.py # 共享依赖
│ ├── routers/ # 路由层
│ ├── schemas/ # Pydantic 模型
│ ├── services/ # 业务逻辑层(简化结构可直接操作数据库)
│ ├── models/ # ORM 模型
│ └── core/ # 数据库、安全等基础设施
├── tests/
│ └── conftest.py # 测试配置与 Fixtures
├── pyproject.toml
├── .env.example
└── README.md
简化架构:
Router → Service → Database(无 Repository 层)。此模式下 Service 兼任 Repository,允许直接注入AsyncSession操作数据库,适合快速开发。事务仍由get_db()统一管理。
{project}/
├── app/
│ ├── main.py
│ ├── config.py
│ ├── api/v1/ # API 版本管理
│ ├── modules/ # 功能模块(按领域划分)
│ │ ├── user/ # 完全自包含:router/schemas/models/service/repository/exceptions/dependencies
│ │ └── item/
│ └── core/ # 基础设施 + 全局异常
├── tests/
│ └── conftest.py
├── pyproject.toml
├── .env.example
└── README.md
详见 项目结构详解
代码模板:assets/simple-api/ 和 assets/modular-api/,模板内 app/ 目录即应用代码,复制后直接得到正确的项目结构。
使用 lifespan 管理应用生命周期(启动/关闭时的资源初始化与清理)。
详见 应用生命周期
使用 pydantic-settings 管理应用配置:
.env 文件 - 开发环境配置SecretStr - 敏感信息防泄露Field(ge=1, le=100) - 类型约束@lru_cache - 全局单例env_nested_delimiter="_" + env_nested_max_split=1详见 配置管理
Annotated[T, Depends(...)] 声明依赖DBSession = Annotated[Session, Depends(get_db)]async def get_user(...) -> UserResponse:详见 依赖注入
ConfigDict(from_attributes=True, str_strip_whitespace=True)Create / Update / Response / InDBField(min_length=8), @field_validator详见 数据模型
ApiResponse[T] / ApiPagedResponse[T] / ErrorResponseApiError 基类 + 派生异常类详见 错误处理与统一响应
AsyncSession, async_sessionmaker详见 数据库配置 | ORM 基类 | Repository 模式
| 方案 | 适用场景 | 特点 |
|---|---|---|
| BackgroundTasks | 轻量任务、无需追踪 | 内置、简单、同进程 |
| ARQ | 异步任务队列 | async 原生、Redis、轻量 |
| Celery | 企业级任务系统 | 生态成熟、功能全面 |
| APScheduler | 定时任务 | 多种触发器、可持久化 |
选型建议:简单通知 → BackgroundTasks | 异步优先 → ARQ | 复杂工作流 → Celery | 定时任务 → APScheduler
详见 BackgroundTasks | ARQ | Celery | APScheduler
按主题分类的详细文档:
代码模板见 assets/simple-api/app/ 和 assets/modular-api/app/
使用 context7 获取最新官方文档(先解析库 ID):
mcp__context7__resolve-library-id
libraryName: fastapi
mcp__context7__query-docs
libraryId: <resolve 返回的 ID>
query: <相关主题>
常用主题:dependencies, middleware, lifespan, background tasks, websocket, testing, security, oauth2, jwt
Use when working with Payload CMS projects (payload.config.ts, collections, fields, hooks, access control, Payload API). Use when debugging validation errors, security issues, relationship queries, transactions, or hook behavior.