跳转至

FastAPI-Easy 开发指南

本文档说明项目结构、开发计划和待办事项。

许可证: 本项目采用 AGPL-3.0 许可证。详见 LICENSE 文件。

  • ✅ 可用于非商业用途
  • ❌ 商业用途需要获得明确许可
  • 📝 修改代码必须共享
  • 📦 使用本项目的软件也必须开源

📁 项目结构分析

✅ 当前结构的合理之处

  1. 清晰的模块划分 - core/、backends/、operations/、utils/ 职责分离
  2. 可扩展的架构 - 易于添加新 ORM、新操作、新工具
  3. 测试友好的设计 - 依赖注入、接口抽象、易于 mock

⚠️ 需要改进的地方

  1. 缺少类型定义 - 需要添加 types.py 定义类型别名和协议
  2. 缺少验证器 - utils/validators.py 需要实现字段级验证
  3. 缺少响应格式化器 - 需要添加 formatters.py 支持自定义响应格式
  4. 缺少中间件 - 需要添加 middleware/ 目录支持错误处理、日志、监控

改进后的项目结构

fastapi-easy/
├── README.md                           # 项目主入口
├── docs/                               # 📚 文档目录
│   ├── README.md                       # 文档中心
│   ├── DEVELOPMENT.md                  # 本文件(开发指南)
│   │
│   └── usage/                          # 使用指南
│       ├── INDEX.md                    # 使用指南完整索引
│       ├── README.md                   # 使用指南导航
│       │
│       ├── 01-quick-start.md           # 快速开始(5 分钟)
│       ├── 02-databases.md             # 支持的数据库(20 分钟)
│       ├── 03-data-flow.md             # 完整流程(15 分钟)
│       ├── 04-filters.md               # 搜索和过滤(10 分钟)
│       ├── 05-sorting.md               # 排序功能(10 分钟)
│       ├── 06-complete-example.md      # 完整示例(20 分钟)
│       ├── 07-architecture.md          # 架构设计⭐(30 分钟)
│       ├── 09-error-handling.md        # 错误处理(10 分钟)
│       ├── 10-soft-delete.md           # 软删除(15 分钟)
│       ├── 11-batch-operations.md      # 批量操作(15 分钟)
│       ├── 12-permissions.md           # 权限控制(20 分钟)
│       ├── 13-audit-logging.md         # 审计日志(15 分钟)
│       ├── 14-configuration.md         # 配置管理(15 分钟)
│       ├── 15-testing.md               # 测试指南(20 分钟)
│       ├── 16-best-practices.md        # 最佳实践(20 分钟)
│       └── 17-troubleshooting.md       # 故障排查(15 分钟)
├── src/                                # 💻 源代码目录(待创建)
│   └── fastapi_easy/
│       ├── __init__.py
│       ├── core/
│       │   ├── crud_router.py          # CRUDRouter 主类
│       │   ├── operations.py           # 操作系统
│       │   ├── adapters.py             # ORM 适配器
│       │   ├── hooks.py                # 钩子系统
│       │   ├── errors.py               # 错误处理
│       │   └── config.py               # 配置系统
│       │
│       ├── backends/                   # ORM 后端
│       │   ├── __init__.py
│       │   ├── base.py                 # 基础适配器
│       │   ├── sqlalchemy.py           # SQLAlchemy 适配器
│       │   ├── tortoise.py             # Tortoise 适配器
│       │   ├── mongo.py                 # MongoDB 适配器
│       │   └── sqlmodel.py             # SQLModel 适配器
│       │
│       ├── operations/                 # 内置操作
│       │   ├── __init__.py
│       │   ├── get_all.py
│       │   ├── get_one.py
│       │   ├── create.py
│       │   ├── update.py
│       │   ├── delete_one.py
│       │   └── delete_all.py
│       │
│       └── utils/                      # 工具函数
│           ├── __init__.py
│           ├── validators.py           # 验证器
│           ├── filters.py              # 过滤器
│           ├── sorters.py              # 排序器
│           └── pagination.py           # 分页
├── tests/                              # 🧪 测试目录(待创建)
│   ├── __init__.py
│   ├── conftest.py
│   ├── test_crud_router.py
│   ├── test_operations.py
│   ├── test_backends/
│   │   ├── test_sqlalchemy.py
│   │   ├── test_tortoise.py
│   │   └── ...
│   ├── test_hooks.py
│   ├── test_errors.py
│   └── test_integration.py
├── examples/                           # 📖 示例项目(待创建)
│   ├── basic/
│   │   └── main.py                     # 基础示例
│   ├── auth/
│   │   └── main.py                     # 鉴权示例
│   ├── ecommerce/
│   │   └── main.py                     # 电商示例
│   └── ...
├── references/                         # 📚 参考资料
│   ├── fastapi-crudrouter/             # 原项目参考
│   └── dfs-generate/                   # 其他项目参考
├── LICENSE                             # AGPL-3.0 许可证
├── setup.py                            # 项目配置
├── requirements.txt                    # 依赖列表
├── pyproject.toml                      # Python 项目配置
└── .gitignore                          # Git 忽略文件

🧪 测试框架设计

测试隔离策略

1. 单元测试隔离(无外部依赖)

  • test_core/: 核心模块测试(config、errors、hooks、operations)
  • test_utils/: 工具函数测试(pagination、filters、sorters)
  • 使用 mock 和 patch 隔离依赖

2. 集成测试隔离(使用真实数据库)

  • test_sqlalchemy/: SQLAlchemy 适配器集成测试
  • test_tortoise/: Tortoise ORM 集成测试
  • 使用内存数据库(SQLite)和事务回滚隔离

3. 端到端测试隔离(完整 API 流程)

  • test_end_to_end/: 完整 API 流程测试
  • 测试完整的请求-响应周期

测试隔离技术

Fixture 隔离

@pytest.fixture
def mock_adapter():
    adapter = AsyncMock(spec=ORMAdapter)
    return adapter

@pytest.fixture
async def db_session():
    # 使用内存数据库
    engine = create_async_engine("sqlite+aiosqlite:///:memory:")
    # 创建表、返回 session、清理

事务隔离 - 每个测试在事务中运行 - 测试完成后自动回滚 - 确保测试间数据隔离

测试覆盖目标

模块 目标覆盖率 优先级
core/ 95% P0
utils/ 90% P0
backends/ 85% P1
operations/ 90% P1

同步开发策略

每个功能的开发步骤: 1. 编写单元测试(测试失败) 2. 实现功能(测试通过) 3. 编写集成测试 4. 代码审查 5. 提交代码


🎯 项目阶段

第 1 阶段:核心框架 ✅ 完成

  • ✅ 项目定位和架构设计
  • ✅ 完整的使用指南(20 份文档)
  • ✅ 架构文档
  • ✅ 源代码实现(16 个核心文件)

第 2 阶段:基础功能和测试 ✅ 完成

  • ✅ CRUDRouter 核心类
  • ✅ 操作系统(Operation System)
  • ✅ 内置 CRUD 操作(6 个)
  • ✅ 钩子系统
  • ✅ 错误处理系统
  • ✅ 单元测试框架
  • ✅ 项目配置(setup.py、requirements.txt)

第 3 阶段:ORM 适配器 ✅ 完成

  • ✅ SQLAlchemy 异步适配器
  • ✅ Tortoise ORM 适配器
  • ✅ 集成测试
  • ✅ 性能基准测试
  • ✅ 完整文档示例

第 4 阶段:高级功能 ✅ 完成

  • ✅ 搜索和过滤
  • ✅ 排序功能
  • ✅ 软删除
  • ✅ 批量操作
  • ✅ 权限控制
  • ✅ 审计日志
  • ✅ 缓存支持
  • ✅ 速率限制

第 5 阶段:扩展功能 ✅ 完成

  • ✅ GraphQL 支持
  • ✅ WebSocket 支持
  • ✅ CLI 工具
  • ✅ 响应格式化器
  • ✅ 输入验证
  • ✅ 中间件系统

第 6 阶段:文档和测试 🔄 进行中

  • ✅ 完整的使用文档(20 份)
  • ✅ 架构设计文档
  • ✅ 开发指南
  • 🔄 测试覆盖率优化(当前 94%)
  • ⏳ 更多集成测试
  • ⏳ 性能优化

第 7 阶段:发布和推广 ⏳ 待开始

  • PyPI 发布
  • 示例项目完善
  • 社区反馈收集

📋 待办事项(TODO)

优先级 P0(必做)

Phase 1: 核心架构 ✅ 已完成

  • CRUDRouter 主类
  • Operation 基类和 OperationRegistry
  • ORMAdapter 基类
  • HookRegistry 和钩子系统
  • AppError 和错误处理
  • CRUDConfig 配置系统
  • 工具函数(pagination、filters、sorters)

Phase 2: 基础功能和测试 ✅ 已完成

测试框架 ✅ - [x] 创建 tests/conftest.py - [x] 全局 fixture 定义 - [x] Mock adapter fixture - [x] 配置 fixture

  • 创建 tests/unit/test_core/
  • test_config.py - 配置测试 (10 个测试)
  • test_errors.py - 错误处理测试 (16 个测试)
  • test_hooks.py - 钩子系统测试 (18 个测试)
  • test_operations.py - 操作系统测试 (9 个测试)

  • 创建 tests/unit/test_utils/

  • test_pagination.py - 分页测试 (12 个测试)
  • test_filters.py - 过滤器测试 (16 个测试)
  • test_sorters.py - 排序器测试 (15 个测试)

内置操作 ✅ - [x] 创建 src/fastapi_easy/operations/ - [x] GetAll 操作 - [x] GetOne 操作 - [x] Create 操作 - [x] Update 操作 - [x] DeleteOne 操作 - [x] DeleteAll 操作

项目配置 ✅ - [x] setup.py - 项目安装配置 - requirements.txt - 依赖列表 - 所有 90 个单元测试通过

优先级 P1(重要)✅ 已完成

高级功能 ✅

  • 软删除支持 - src/fastapi_easy/core/soft_delete.py
  • 批量操作 - src/fastapi_easy/core/bulk_operations.py
  • 权限控制集成 - src/fastapi_easy/core/permissions.py
  • 审计日志 - src/fastapi_easy/core/audit_log.py

测试 ✅

  • 单元测试框架设置 - tests/unit/
  • 核心功能测试 - tests/unit/test_core/
  • ORM 适配器测试 - tests/integration/
  • 集成测试 - tests/e2e/

文档 ✅

  • API 文档 - 20 份详细文档
  • 开发者指南 - docs/DEVELOPMENT.md
  • 贡献指南 - 本文件中的贡献指南部分

优先级 P2(可选)✅ 已完成

扩展功能 ✅

  • 缓存支持 - src/fastapi_easy/core/cache.py
  • 速率限制 - src/fastapi_easy/core/rate_limit.py
  • GraphQL 支持 - src/fastapi_easy/graphql.py
  • WebSocket 支持 - src/fastapi_easy/websocket.py

工具 ✅

  • CLI 工具 - src/fastapi_easy/cli.py
  • 代码生成器 - CLI 中集成
  • 数据库迁移工具 - 计划中

示例 ✅

  • 基础示例 - examples/simple_example.py
  • 鉴权示例 - examples/sqlmodel_example.py
  • 电商示例 - 文档中的完整示例
  • 微服务示例 - 计划中

开发工作流

1. 环境设置

# 克隆项目
git clone https://github.com/your-repo/fastapi-easy.git
cd fastapi-easy

# 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Linux/Mac
# 或
venv\Scripts\activate  # Windows

# 安装开发依赖
pip install -e ".[dev]"
pip install pytest pytest-asyncio pytest-cov black flake8 mypy

2. 代码风格

  • 使用 Black 格式化代码
  • 使用 Flake8 检查代码质量
  • 使用 MyPy 进行类型检查
  • 遵循 PEP 8 规范

3. 测试

# 运行所有测试
pytest

# 运行特定测试
pytest tests/test_crud_router.py

# 生成覆盖率报告
pytest --cov=fastapi_easy tests/

4. 提交代码

# 格式化代码
black src/ tests/

# 检查代码质量
flake8 src/ tests/
mypy src/

# 运行测试
pytest

# 提交
git add .
git commit -m "feat: add feature description"
git push

开发进度

当前状态

  • 📚 文档: 100% 完成(20 份详细文档)
  • 💻 代码: 90% 完成(Phase 1-5 完成)
  • 🧪 测试: 94% 覆盖率(持续优化中)
  • 📦 发布: 准备中

指标统计

指标 数值
总文件数 30+ 个
总代码行数 5000+ 行
核心模块 16 个
测试覆盖率 94%
文档行数 4000+ 行
ORM 支持 SQLAlchemy + Tortoise
功能数量 23 个
许可证 AGPL-3.0

完成时间表

阶段 任务 完成时间 状态
1 核心框架 2 周 ✅ 完成
2 基础功能 2 周 ✅ 完成
3 ORM 适配器 1 周 ✅ 完成
4 高级功能 2 周 ✅ 完成
5 扩展功能 1 周 ✅ 完成
6 文档和测试 进行中 🔄 进行中
7 发布推广 待开始 ⏳ 待开始
总计 9 周

🤝 贡献指南

报告 Bug

  1. 检查是否已有相同的 Issue
  2. 提供详细的复现步骤
  3. 包含错误信息和日志
  4. 注意:本项目采用 AGPL-3.0 许可证

提交功能

  1. 创建 Feature Branch
  2. 编写代码和测试
  3. 提交 Pull Request
  4. 等待代码审查
  5. 确保遵守 AGPL-3.0 许可证条款

代码审查标准

  • ✅ 代码风格符合规范
  • ✅ 有相应的测试
  • ✅ 文档已更新
  • ✅ 没有破坏现有功能
  • ✅ 遵守 AGPL-3.0 许可证
  • ✅ 包含必要的许可证头注释

📞 联系方式


📝 更新日志

v0.1.0 (当前)

  • 📚 完成项目文档和架构设计
  • 📋 创建开发指南
  • 🔐 采用 AGPL-3.0 许可证

v1.0.0 (计划)

  • 💻 所有核心功能已实现
  • 🧪 94% 测试覆盖率
  • 📦 首次 PyPI 发布
  • 🌍 国际化支持

许可证: AGPL-3.0 (详见 LICENSE)

最后更新: 2024 年 11 月 28 日