fastapi-demo/docs/complete-crud-api/ALIGNMENT_complete-crud-api.md

220 lines
5.8 KiB
Markdown
Raw Normal View History

2025-09-28 09:12:13 +08:00
# ALIGNMENT - 完善 CRUD API 功能
## 项目特性规范
### 当前项目分析
#### 技术栈
- **FastAPI**: Python 异步 Web 框架
- **SQLAlchemy**: ORM 框架
- **MySQL**: 数据库 (fast_demo)
- **Pydantic**: 数据验证和序列化
- **Uvicorn**: ASGI 服务器
#### 项目架构模式
- **分层架构**: API层 → 服务层 → 数据访问层
- **应用工厂模式**: 支持多环境配置
- **依赖注入**: 数据库会话管理
#### 现有代码结构
```
app/
├── api/v1/endpoints/ # API 路由层
├── services/ # 业务逻辑层
├── database/ # 数据库相关
│ ├── models.py # SQLAlchemy 数据库模型
│ ├── connection.py # 数据库连接
│ └── base.py # Base 模型类
├── models/ # Pydantic 数据模型
├── schemas/ # 请求/响应模式
└── core/ # 核心配置
```
#### 当前状态分析
**已完成**:
- 数据库连接配置和环境管理
- SQLAlchemy 数据库模型 (User, Product)
- Pydantic 模式定义
- 基础 API 路由结构
- GET 操作的 API 端点
**待完善**:
- 服务层使用内存假数据 (`fake_users_db`)
- 缺少 POST、PUT、DELETE API 端点
- 没有数据库持久化操作
- 缺少数据验证和异常处理
- 缺少完整的 CRUD 测试
## 原始需求
> "1. 🔧 完善现有 API 功能 - 为 Users 和 Products 添加完整的 CRUD 操作 (CREATE, UPDATE, DELETE) - 实现数据库持久化存储"
## 需求理解
### 核心目标
将现有的基于内存假数据的 API 服务转换为基于 MySQL 数据库的完整 CRUD 系统。
### 具体需求拆解
#### 1. Users API 完善
-**GET /api/v1/users/** - 获取用户列表 (已存在)
-**GET /api/v1/users/{id}** - 获取单个用户 (已存在)
-**POST /api/v1/users/** - 创建新用户 (需实现)
-**PUT /api/v1/users/{id}** - 更新用户信息 (需实现)
-**DELETE /api/v1/users/{id}** - 删除用户 (需实现)
#### 2. Products API 完善
-**GET /api/v1/products/** - 获取产品列表 (已存在)
-**GET /api/v1/products/{id}** - 获取单个产品 (已存在)
-**POST /api/v1/products/** - 创建新产品 (需实现)
-**PUT /api/v1/products/{id}** - 更新产品信息 (需实现)
-**DELETE /api/v1/products/{id}** - 删除产品 (需实现)
#### 3. 数据库持久化
- 替换内存假数据为真实数据库操作
- 使用 SQLAlchemy ORM 进行数据库交互
- 实现数据库会话管理
#### 4. 数据验证和异常处理
- 输入数据验证 (Pydantic)
- 数据库约束验证
- 合适的 HTTP 状态码返回
- 错误信息处理
## 边界确认
### 包含在任务范围内
**API 端点**:
- 完整的 Users CRUD 操作
- 完整的 Products CRUD 操作
- 数据库持久化实现
**技术实现**:
- 服务层重构 (移除假数据)
- 数据库操作集成
- API 路由完善
- 基础数据验证
**质量保证**:
- API 测试用例
- 错误处理机制
- 文档更新
### 不包含在任务范围内
**高级功能**:
- 用户认证和授权
- API 限流和缓存
- 分页和复杂查询
- 文件上传处理
**业务逻辑**:
- 复杂业务规则验证
- 工作流程控制
- 第三方集成
**性能优化**:
- 数据库索引优化
- 查询性能调优
- 缓存策略
## 疑问澄清
### 已解决的技术疑问
1. **数据库连接**: ✅ 已确认 MySQL 连接正常,数据库名为 `fast_demo`
2. **表结构**: ✅ 已确认 SQLAlchemy 模型定义完整 (User, Product)
3. **项目架构**: ✅ 已分析现有分层架构模式
4. **配置管理**: ✅ 已确认多环境配置支持
### 需要确认的决策点
#### 1. 数据验证策略
**选项**:
- A) 仅依赖 Pydantic 模式验证
- B) 添加服务层业务规则验证
- C) 数据库层约束 + Pydantic 验证
**建议**: 选择 C使用分层验证确保数据完整性
#### 2. 错误处理级别
**选项**:
- A) 基础 HTTP 状态码返回
- B) 详细错误信息和错误代码
- C) 结构化错误响应格式
**建议**: 选择 B提供清晰的错误信息便于调试
#### 3. API 响应格式
**选项**:
- A) 直接返回数据模型
- B) 统一响应格式包装
- C) RESTful 标准响应
**建议**: 选择 A保持与现有代码风格一致
#### 4. 数据库会话管理
**选项**:
- A) 依赖注入 SessionLocal
- B) 上下文管理器
- C) 服务层直接管理
**建议**: 选择 A利用 FastAPI 依赖注入机制
## 技术约束
### 必须遵循的约束
- 保持现有项目结构和命名约定
- 使用现有的数据库模型定义
- 保持 API 路径结构 `/api/v1/`
- 使用现有的 Pydantic 模式
- 保持现有的错误处理风格
### 技术限制
- Python 3.11+
- FastAPI 框架限制
- SQLAlchemy ORM 使用
- MySQL 数据库约束
- 现有依赖包版本
## 验收标准
### 功能验收
1. **Users API**:
- [ ] POST 创建用户成功返回 201
- [ ] PUT 更新用户成功返回 200
- [ ] DELETE 删除用户成功返回 204
- [ ] 所有操作均持久化到数据库
2. **Products API**:
- [ ] POST 创建产品成功返回 201
- [ ] PUT 更新产品成功返回 200
- [ ] DELETE 删除产品成功返回 204
- [ ] 所有操作均持久化到数据库
3. **数据验证**:
- [ ] 必填字段验证
- [ ] 唯一性约束验证
- [ ] 数据类型验证
4. **错误处理**:
- [ ] 资源不存在返回 404
- [ ] 数据验证失败返回 422
- [ ] 数据库错误适当处理
### 质量验收
- [ ] 代码遵循现有项目规范
- [ ] 所有新增代码有适当注释
- [ ] API 文档自动生成正确
- [ ] 测试覆盖主要功能点
### 技术验收
- [ ] 数据库连接正常工作
- [ ] 事务管理正确实现
- [ ] 无内存泄漏或连接泄漏
- [ ] 与现有代码无冲突
---
**创建时间**: 2025-09-28
**任务负责**: Claude AI
**预计工期**: 2-3小时