用途
本技能为构建生产级 FastAPI 应用提供全面指导,采用 2024-2025 现代 Python 模式。FastAPI 被描述为 AI/ML API 的首选框架,结合高性能、自动 OpenAPI 文档与直观的 async/await 模式。
适用场景包括:为 ML/AI 服务构建 RESTful API;创建高性能异步 Python Web 服务;开发需要并发请求处理的数据密集型应用;实现带自动 API 文档的微服务;构建需要强类型安全与校验的 API;为 LLM 集成与 AI 工作流设计端点。
核心原则
1. 异步优先架构 对 I/O 密集型操作始终优先使用 async/await。数据库操作使用异步会话与 await db.execute;外部 API 调用使用 httpx.AsyncClient 异步请求。反面示例是在异步上下文中使用 time.sleep(5),会阻塞整个事件循环。资料说明:FastAPI 运行于 ASGI (asyncio),阻塞调用会阻止其他请求处理,在高负载下降低性能。
2. Pydantic v2 模型与类型安全 所有请求/响应校验使用 Pydantic 模型。通过 Field 定义约束(min_length、max_length、pattern、ge、le),使用 @field_validator 做自定义校验,响应模型使用 from_attributes=True,且从不暴露内部字段(如 password_hash)。资料列出 Pydantic v2 关键更新:Config → model_config = ConfigDict(...);orm_mode=True → from_attributes=True;dict() → model_dump();@validator → @field_validator。
3. 依赖注入实现松耦合 使用 FastAPI 依赖注入构建可复用组件,包括数据库会话依赖(async generator + yield)与认证依赖(OAuth2PasswordBearer 解析 token、查询用户、抛出 401)。资料指出其优势:自动注入、可通过 override_dependency 便于测试、跨路由共享逻辑。
4. 结构化错误处理 始终使用 HTTPException 配合恰当状态码(如 404 NOT_FOUND、403 FORBIDDEN),并可为领域错误注册自定义异常处理器(@app.exception_handler)返回 JSONResponse。
5. ML/AI 端点设计模式 包括:使用 @lru_cache() 实现模型加载单例,仅加载一次并缓存;请求/响应模型定义字段与取值范围;通过 loop.run_in_executor 将 CPU 密集型推理放入线程池执行,并记录处理耗时;使用 BackgroundTasks 做异步处理,返回 task_id 与 processing 状态。
最佳实践
应用结构:资料给出完整目录示例,包含 app/、models/(SQLAlchemy ORM 模型)、schemas/(Pydantic 请求/响应模型)、api/v1/(路由)、api/deps.py(共享依赖)、services/(业务逻辑)、core/(security、database 等核心工具)、tests/,以及 alembic/(数据库迁移)、.env、pyproject.toml、README.md。
配置管理:使用 pydantic_settings.BaseSettings 与 SettingsConfigDict(env_file=".env"、case_sensitive=False),定义 DATABASE_URL、SECRET_KEY、ALGORITHM、ACCESS_TOKEN_EXPIRE_MINUTES、API_V1_PREFIX、PROJECT_NAME、BACKEND_CORS_ORIGINS 等,并通过 @lru_cache() 的 get_settings() 在依赖中使用。
请求生命周期与中间件:添加 CORSMiddleware、GZipMiddleware,以及自定义的 @app.middleware("http") 日志中间件,记录方法、路径、耗时与状态码并写入 X-Process-Time 响应头。
常见模式:分页通过泛型 Page[T] 模型与 paginate 函数实现(计算 total、offset/limit、pages),并以 response_model=Page[UserResponse] 暴露;文件上传校验 content_type、大小(示例限制 10MB)、可打开性,并用 aiofiles 异步保存;WebSocket 通过 ConnectionManager 管理连接、接受、断开与广播。
应避免的反模式:在异步路由中混用同步调用(阻塞事件循环,应使用 run_in_executor);直接返回 ORM 模型(暴露内部字段、存在懒加载风险,应使用 response_model);硬编码配置(应使用 Pydantic Settings);忽略启动/关闭事件(应在 startup 初始化数据库池与加载模型、在 shutdown 关闭连接)。
测试策略:使用 TestClient 做同步测试,使用 httpx.AsyncClient 配合 @pytest.mark.asyncio 做异步测试,并通过 app.dependency_overrides 覆盖依赖。
性能优化:连接池(SQLAlchemy 异步引擎 pool_size=20、max_overflow=0);响应缓存(Redis 与 @lru_cache());后台任务卸载非关键工作;异步库(httpx 而非 requests,asyncpg 而非 psycopg2);使用 uvicorn --log-level debug 与计时中间件做性能分析。
安全检查清单:生产使用 HTTPS(通过反向代理);实现限流(slowapi 库);用 Pydantic 校验所有输入;使用 OAuth2 与 JWT 认证;生产中不暴露内部错误细节;设置正确的 CORS 来源(生产不用 ["*"]);使用 bcrypt 或 argon2 哈希密码;SECRET_KEY 从环境读取,绝不硬编码。
相关技能
资料提及相关技能 test-driven-development(先写测试),其余内容未完整提供。
限制
资料未提供该技能的收费、价格、平台支持范围、具体安装命令或使用步骤,亦未说明版本要求与授权信息,这些内容暂未提供。