fastapi-demo/CLAUDE.md

133 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CLAUDE.md
此文件为 Claude Code (claude.ai/code) 在此代码库中工作时提供指导。
## 常用命令
### 运行应用程序
```bash
# 安装依赖
pip install -r requirements.txt
# 1. 直接运行(使用 .env 或默认配置)
python main.py
# 2. 指定环境运行(推荐)
ENVIRONMENT=development python main.py # 使用 .env.dev 配置
ENVIRONMENT=testing python main.py # 使用 .env.test 配置
ENVIRONMENT=production python main.py # 使用 .env.prod 配置
# 3. Windows 系统设置环境变量
set ENVIRONMENT=development && python main.py
set ENVIRONMENT=production && python main.py
# 4. 手动指定 uvicorn 参数(不推荐,应优先使用配置文件)
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
# 5. 临时覆盖配置(环境变量优先级最高)
PORT=9000 HOST=127.0.0.1 python main.py
# 6. 使用便捷启动脚本(推荐)
python start.py --env dev # 开发环境
python start.py --env prod # 生产环境
python start.py --port 9000 # 指定端口
python start.py --env dev --reload # 开发环境+强制热重载
```
### 配置文件启动说明
应用会自动读取配置并使用对应的启动参数:
- **开发环境** (`.env.dev`)自动启用热重载、调试模式、允许所有CORS
- **测试环境** (`.env.test`)关闭API文档、严格CORS限制
- **生产环境** (`.env.prod`)多worker、关闭热重载、严格安全设置
### 配置管理
```bash
# 复制环境配置模板
cp .env.example .env
# 查看当前配置
python -c "from app.core.config import settings; print(f'Environment: {settings.ENVIRONMENT}'); print(f'Debug: {settings.DEBUG}')"
```
### 测试 API
```bash
# 访问交互式 API 文档
# 在浏览器中打开 http://localhost:8000/docs (Swagger UI)
# 或 http://localhost:8000/redoc (ReDoc)
# 健康检查端点
curl http://localhost:8000/health
```
## 架构说明
### 项目结构模式
这个 FastAPI 演示项目采用分层架构和应用工厂模式,具有清晰的关注点分离:
- **应用工厂** (`app/core/application.py`):使用工厂模式创建和配置应用实例,集中管理中间件、路由注册和事件处理器。
- **路由聚合** (`app/api/v1/router.py`):集中管理 v1 版本的所有路由注册,保持主文件精简。
- **API 层** (`app/api/v1/endpoints/`):处理 HTTP 请求和响应的 FastAPI 路由器。每个路由器对应一个资源(用户、产品)并定义 API 端点。
- **服务层** (`app/services/`):使用静态服务类实现业务逻辑。目前使用内存中的模拟数据库进行演示。服务处理 CRUD 操作和业务规则。
- **模式层** (`app/schemas/`):用于请求/响应验证和序列化的 Pydantic 模型。为每个实体遵循 Base、Create、Update 和 Response 模型的模式。
- **模型层** (`app/models/`):表示核心实体的领域模型。这些是配置了 `from_attributes = True` 的 Pydantic BaseModel以兼容 ORM。
- **核心配置** (`app/core/config.py`):使用 pydantic-settings 的集中式设置管理,支持多环境配置文件和环境变量覆盖。
### 关键架构决策
1. **应用工厂模式**:使用 `create_application()` 函数创建应用,便于测试和配置管理,支持多环境部署。
2. **路由模块化**:通过 `router.py` 集中管理路由注册,`main.py` 保持精简,只负责应用启动。
3. **版本化的 API 路由**:所有端点都以 `/api/v1/` 为前缀,便于 API 版本迭代和兼容性管理。
4. **服务模式**:使用单例服务实例(`user_service`、`product_service`)封装所有业务逻辑,保持路由器精简。
5. **模式分离**为不同操作Create、Update、Response设置不同的模式在 API 设计中提供灵活性,而不暴露内部模型细节。
6. **内存数据存储**:目前使用内存中的模拟列表进行数据存储。这是有意为演示而设计的 - 实际实现将在服务层中集成数据库。
7. **CORS 中间件**:配置了宽松的设置(`allow_origins=["*"]`)适合开发环境。生产环境中应该限制。
8. **事件处理器**:在 `application.py` 中注册启动和关闭事件,便于管理应用生命周期(如数据库连接、缓存初始化等)。
### 配置管理详情
项目采用类似 Spring Boot 的分层配置管理:
1. **配置文件优先级**(从高到低):
- 环境变量
- `.env.{environment}` (如 `.env.dev`, `.env.prod`
- `.env` 基础配置文件
- 代码中的默认值
2. **多环境配置**
- `.env.dev` - 开发环境调试开启、允许所有CORS、使用SQLite
- `.env.test` - 测试环境关闭API文档、严格限流、测试数据库
- `.env.prod` - 生产环境关闭调试、使用PostgreSQL、启用监控
3. **配置特性**
- 类型验证和转换
- 环境变量解析如CORS_ORIGINS支持逗号分隔
- 配置验证器(如环境名称校验)
- 便利属性(如 `settings.is_development`
4. **敏感信息管理**
- 密钥、密码等敏感信息通过环境变量管理
- `.env` 文件已添加到 `.gitignore`
- 提供 `.env.example` 作为配置模板
### 添加新功能
添加新资源/实体时:
1.`app/models/` 中创建模型
2.`app/schemas/` 中创建模式Base、Create、Update、Response
3.`app/services/` 中创建包含 CRUD 操作的服务类
4.`app/api/v1/endpoints/` 中创建包含端点的路由器
5. 在 `app/api/v1/router.py` 中注册新的路由器,设置适当的前缀和标签