←返回首页
350 字2 分钟2025-12-16Technology#FastAPI / Python / System Design / JWT / Security
FastAPI 异步架构复盘与认证实现
FastAPI 异步架构复盘与认证实现
项目概述
本项目致力于构建一个模块化、分层且支持异步流式输出的 AI 总结 API。在完成基础功能开发后,我们对现有的架构进行了深度复盘,并在此基础上规划了企业级用户认证(Authentication)与授权(Authorization)系统的实现路径。该项目遵循“关注点分离”原则,体现了从 POC(概念验证)向生产级应用演进的完整过程。
核心设计理念
- 分层架构 (Layered Architecture): 将不同职责的代码分离(API、Service、Core、Schema),确保项目易于维护和扩展。
- 异步优先 (Async First): 从框架层到 I/O 调用全链路采用异步设计 (
async/await),保障高并发性能。 - 流式响应 (Streaming): 利用 Server-Sent Events (SSE) 实现 AI 生成内容的实时流式输出,优化用户体验。
- 配置分离: 使用 Pydantic Settings 管理配置,确保敏感信息(如 API Key)与业务代码解耦。
- 类型安全: 全程使用 Type Hints 和 Pydantic 模型,减少运行时错误。
核心技术栈
- 后端框架: FastAPI
- 数据验证: Pydantic v2
- 配置管理: Pydantic-Settings
- 数据库: MySQL (配合 SQLAlchemy ORM + asyncmy)
- 认证安全: Python-Jose (JWT), Passlib (Bcrypt)
- AI 模型: 阿里云通义千问 (DashScope)
各层代码梳理
1. 表现层 (Presentation Layer)
- 位置:
app/api/endpoints.py - 职责: 处理 HTTP 请求与响应,保持逻辑轻量。
- 实现细节:
- 使用
APIRouter实现路由模块化。 - 定义
POST /summarize异步端点。 - 接收
SummaryRequest数据模型。 - 调用服务层获取异步生成器,并通过
StreamingResponse返回流式数据。
- 使用
2. 核心配置层 (Core Layer)
- 位置:
app/core/config/settings.py - 职责: 管理环境配置与第三方服务参数。
- 实现细节:
- 定义
AppSettings和DashscopeSettings。 - 自动加载
.env环境变量,避免密钥硬编码。
- 定义
3. 数据模型层 (Schema Layer)
- 位置:
app/schemas/summary.py - 职责: 定义数据结构与验证规则。
- 实现细节:
- 验证输入 JSON 包含
chat_content和可选的prompt。 - 自动返回
422 Unprocessable Entity错误处理。
- 验证输入 JSON 包含
4. 服务层 (Service Layer)
- 位置:
app/services/summarization_agent.py - 职责: 封装核心业务逻辑与 AI 交互。
- 实现细节:
- 封装通义千问模型调用逻辑。
- 实现
stream_and_log_agent_response核心函数。 - SSE 格式化: 将数据处理为
data: ...\n\n格式。 - 监控: 使用
logging记录流式节点和性能指标。
5. 应用入口
- 位置:
app/main.py - 职责: 组装应用与路由。
- 实现细节: 初始化 FastAPI 实例,挂载 API 路由,设置健康检查端点。
认证系统实现指南
1. 环境与数据库准备
- 配置: 在
.env中添加SECRET_KEY,ALGORITHM,ACCESS_TOKEN_EXPIRE_MINUTES及数据库连接串。 - 数据库: 创建
users表,包含id,username,hashed_password(严禁存储明文)。
2. 核心认证逻辑 (Service/Core)
- 密码处理: 实现
hash_password(哈希加密) 和verify_password(校验)。 - Token 管理: 实现
create_access_token(生成 JWT) 和decode_access_token(解析验证)。 - 用户查询: 实现
get_user_by_username用于数据库检索。
3. 数据库交互 (ORM)
- 工具: 使用 SQLAlchemy + asyncmy。
- 模型: 定义
UserORM 模型映射数据库表。 - 会话: 创建 Session 依赖项,管理数据库连接生命周期。
4. 登录端点 (API)
- 路径:
POST /api/v1/login - 逻辑:
- 接收用户名/密码。
- 校验用户是否存在及密码是否匹配。
- 校验通过后签发 JWT Access Token。
5. 权限依赖项 (Dependency)
- 函数:
get_current_user - 逻辑:
- 从请求头提取
Authorization: Bearer <token>。 - 解码 Token,验证有效期和签名。
- 确认用户在数据库中依然存在。
- 返回 User 对象或抛出
401 Unauthorized。
- 从请求头提取
6. 接口保护
- 应用: 在需要保护的接口(如
/summarize)中注入依赖:async def endpoint(user: User = Depends(get_current_user)): ...
总结
本项目通过清晰的分层架构设计,实现了高内聚低耦合的代码结构。结合异步流式处理,保证了 AI 场景下的高性能体验。通过引入 JWT 认证机制,进一步完善了系统的安全性,使其具备了从原型向企业级应用转化的基础能力。
