返回首页
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
  • 职责: 管理环境配置与第三方服务参数。
  • 实现细节:
    • 定义 AppSettingsDashscopeSettings
    • 自动加载 .env 环境变量,避免密钥硬编码。

3. 数据模型层 (Schema Layer)

  • 位置: app/schemas/summary.py
  • 职责: 定义数据结构与验证规则。
  • 实现细节:
    • 验证输入 JSON 包含 chat_content 和可选的 prompt
    • 自动返回 422 Unprocessable Entity 错误处理。

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。
  • 模型: 定义 User ORM 模型映射数据库表。
  • 会话: 创建 Session 依赖项,管理数据库连接生命周期。

4. 登录端点 (API)

  • 路径: POST /api/v1/login
  • 逻辑:
    1. 接收用户名/密码。
    2. 校验用户是否存在及密码是否匹配。
    3. 校验通过后签发 JWT Access Token。

5. 权限依赖项 (Dependency)

  • 函数: get_current_user
  • 逻辑:
    1. 从请求头提取 Authorization: Bearer <token>
    2. 解码 Token,验证有效期和签名。
    3. 确认用户在数据库中依然存在。
    4. 返回 User 对象或抛出 401 Unauthorized

6. 接口保护

  • 应用: 在需要保护的接口(如 /summarize)中注入依赖:
    async def endpoint(user: User = Depends(get_current_user)): ...
    

总结

本项目通过清晰的分层架构设计,实现了高内聚低耦合的代码结构。结合异步流式处理,保证了 AI 场景下的高性能体验。通过引入 JWT 认证机制,进一步完善了系统的安全性,使其具备了从原型向企业级应用转化的基础能力。

正在初始化...