353 lines
7.9 KiB
Markdown
353 lines
7.9 KiB
Markdown
# FastAPI 学习资源集合
|
||
|
||
欢迎!这个目录包含了学习 FastAPI 的完整资源,特别适合从 Flask 迁移到 FastAPI 的开发者。
|
||
|
||
## 📚 文档列表
|
||
|
||
### 1. [FastAPI 学习文档](./FASTAPI_LEARNING.md) 📖
|
||
**推荐首先阅读**
|
||
|
||
全面的 FastAPI 学习指南,包括:
|
||
- FastAPI 简介和特点
|
||
- Flask vs FastAPI 详细对比
|
||
- FastAPI 核心概念详解
|
||
- 项目中的实际应用分析
|
||
- 学习路径建议
|
||
- 常见问题解答
|
||
|
||
**适合**:想要系统学习 FastAPI 的初学者
|
||
|
||
### 2. [FastAPI 快速参考指南](./FASTAPI_QUICK_REFERENCE.md) ⚡
|
||
**日常开发速查手册**
|
||
|
||
快速查找常用功能的参考指南:
|
||
- 路由定义
|
||
- 请求和响应处理
|
||
- 数据验证
|
||
- 依赖注入
|
||
- 错误处理
|
||
- 异步编程
|
||
- 项目中的实际应用模式
|
||
|
||
**适合**:日常开发时快速查找语法和用法
|
||
|
||
### 3. [Flask 到 FastAPI 迁移指南](./FLASK_TO_FASTAPI_MIGRATION.md) 🔄
|
||
**迁移项目必读**
|
||
|
||
详细的迁移指南,包括:
|
||
- 迁移概览和步骤
|
||
- 核心概念对比表
|
||
- 代码迁移示例
|
||
- 当前项目的迁移分析
|
||
- 常见迁移问题解答
|
||
- 迁移检查清单
|
||
|
||
**适合**:正在从 Flask 迁移到 FastAPI 的开发者
|
||
|
||
---
|
||
|
||
## 🎯 学习路径
|
||
|
||
### 阶段 1:基础入门(1-2 天)
|
||
|
||
1. **阅读 [FastAPI 学习文档](./FASTAPI_LEARNING.md)**
|
||
- 理解 FastAPI 的基本概念
|
||
- 了解 Flask vs FastAPI 的区别
|
||
- 理解项目中的 FastAPI 使用
|
||
|
||
2. **运行项目**
|
||
```bash
|
||
# 安装依赖
|
||
pip install -r requirements.txt
|
||
|
||
# 运行项目
|
||
python main.py
|
||
# 或
|
||
uvicorn main:app --reload
|
||
```
|
||
|
||
3. **访问 API 文档**
|
||
- 启动后访问:http://localhost:5003/docs
|
||
- 查看自动生成的 Swagger UI 文档
|
||
- 尝试调用 API 端点
|
||
|
||
### 阶段 2:深入理解(2-3 天)
|
||
|
||
1. **分析项目代码**
|
||
- 阅读 `main.py`,理解应用初始化
|
||
- 阅读 `app/module/` 下的业务模块
|
||
- 理解任务队列机制
|
||
|
||
2. **参考 [Flask 到 FastAPI 迁移指南](./FLASK_TO_FASTAPI_MIGRATION.md)**
|
||
- 理解迁移过程
|
||
- 对比 Flask 和 FastAPI 的写法
|
||
- 理解项目中的迁移实现
|
||
|
||
3. **实践练习**
|
||
- 添加新的 API 端点
|
||
- 添加数据验证
|
||
- 添加错误处理
|
||
|
||
### 阶段 3:熟练应用(3-5 天)
|
||
|
||
1. **使用 [快速参考指南](./FASTAPI_QUICK_REFERENCE.md)**
|
||
- 在日常开发中参考
|
||
- 尝试不同的 FastAPI 特性
|
||
- 优化现有代码
|
||
|
||
2. **深入学习**
|
||
- 学习异步编程
|
||
- 学习 Pydantic 高级特性
|
||
- 学习依赖注入系统
|
||
|
||
3. **项目改进**
|
||
- 重构代码使用 FastAPI 最佳实践
|
||
- 添加更多类型提示
|
||
- 优化性能
|
||
|
||
---
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 1. 安装依赖
|
||
|
||
```bash
|
||
pip install fastapi uvicorn
|
||
```
|
||
|
||
### 2. 最小示例
|
||
|
||
```python
|
||
from fastapi import FastAPI
|
||
|
||
app = FastAPI()
|
||
|
||
@app.get("/")
|
||
async def read_root():
|
||
return {"Hello": "World"}
|
||
|
||
@app.get("/items/{item_id}")
|
||
async def read_item(item_id: int):
|
||
return {"item_id": item_id}
|
||
```
|
||
|
||
### 3. 运行应用
|
||
|
||
```bash
|
||
uvicorn main:app --reload
|
||
```
|
||
|
||
### 4. 访问文档
|
||
|
||
- Swagger UI: http://localhost:8000/docs
|
||
- ReDoc: http://localhost:8000/redoc
|
||
|
||
---
|
||
|
||
## 📖 项目结构
|
||
|
||
```
|
||
fastapi_app/
|
||
├── main.py # FastAPI 应用入口
|
||
├── api.py # API 工具类
|
||
├── app/
|
||
│ ├── api.py # 简道云 API 封装
|
||
│ ├── config.py # 配置管理
|
||
│ ├── module/ # 业务模块
|
||
│ │ ├── F6_Plugin_module.py
|
||
│ │ ├── module.py
|
||
│ │ └── other_module.py
|
||
│ ├── tasks/ # 后台任务
|
||
│ └── utils/ # 工具函数
|
||
│ └── app_tools.py
|
||
├── requirements.txt # 依赖列表
|
||
│
|
||
├── FASTAPI_LEARNING.md # 📖 学习文档
|
||
├── FASTAPI_QUICK_REFERENCE.md # ⚡ 快速参考
|
||
└── FLASK_TO_FASTAPI_MIGRATION.md # 🔄 迁移指南
|
||
```
|
||
|
||
---
|
||
|
||
## 🔑 关键概念
|
||
|
||
### 1. 应用实例
|
||
|
||
```python
|
||
from fastapi import FastAPI
|
||
|
||
app = FastAPI(title="简道云FastAPI服务")
|
||
```
|
||
|
||
### 2. 路由定义
|
||
|
||
```python
|
||
@app.post("/webhook")
|
||
async def webhook(request: Request):
|
||
data = await request.json()
|
||
return JSONResponse(result)
|
||
```
|
||
|
||
### 3. 应用状态
|
||
|
||
```python
|
||
# 启动时设置
|
||
app.state.logger = setup_global_logger(Config)
|
||
|
||
# 路由中使用
|
||
logger = app.state.logger
|
||
```
|
||
|
||
### 4. 生命周期事件
|
||
|
||
```python
|
||
@app.on_event("startup")
|
||
def on_startup():
|
||
# 初始化代码
|
||
pass
|
||
```
|
||
|
||
---
|
||
|
||
## 💡 项目中的实际应用
|
||
|
||
### 1. 应用初始化
|
||
|
||
```python
|
||
# main.py
|
||
app = FastAPI(title="简道云FastAPI服务")
|
||
|
||
@app.on_event("startup")
|
||
def on_startup():
|
||
app.state.app_tools = AppTools(Config)
|
||
app.state.logger = setup_global_logger(Config)
|
||
app.state.f6_module = F6Module()
|
||
```
|
||
|
||
### 2. 路由处理
|
||
|
||
```python
|
||
@app.post("/webhook")
|
||
async def webhook(request: Request):
|
||
logger = app.state.logger
|
||
app_tools = app.state.app_tools
|
||
|
||
data = await request.json()
|
||
header = request.headers
|
||
|
||
# 处理逻辑
|
||
result = await anyio.to_thread.run_sync(response_queue.get)
|
||
|
||
return JSONResponse(result)
|
||
```
|
||
|
||
### 3. 任务队列
|
||
|
||
```python
|
||
# 将任务放入队列
|
||
response_queue = app_tools.enqueue_task(handler, data)
|
||
|
||
# 在线程池中执行同步函数
|
||
result = await anyio.to_thread.run_sync(response_queue.get)
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 推荐资源
|
||
|
||
### 官方文档
|
||
- **FastAPI 官方文档**: https://fastapi.tiangolo.com/
|
||
- **FastAPI 中文文档**: https://fastapi.tiangolo.com/zh/
|
||
- **Pydantic 文档**: https://docs.pydantic.dev/
|
||
- **Uvicorn 文档**: https://www.uvicorn.org/
|
||
|
||
### 学习资源
|
||
- **FastAPI 教程**: https://fastapi.tiangolo.com/tutorial/
|
||
- **Python 异步编程**: https://docs.python.org/3/library/asyncio.html
|
||
- **类型提示**: https://docs.python.org/3/library/typing.html
|
||
|
||
---
|
||
|
||
## ❓ 常见问题
|
||
|
||
### Q: 我应该先读哪个文档?
|
||
|
||
**A:** 建议按以下顺序:
|
||
1. 先读 [FastAPI 学习文档](./FASTAPI_LEARNING.md) 了解基础
|
||
2. 再读 [Flask 到 FastAPI 迁移指南](./FLASK_TO_FASTAPI_MIGRATION.md) 理解迁移
|
||
3. 日常开发时参考 [快速参考指南](./FASTAPI_QUICK_REFERENCE.md)
|
||
|
||
### Q: 如何理解项目中的异步代码?
|
||
|
||
**A:**
|
||
- FastAPI 使用 `async/await` 处理异步操作
|
||
- `await request.json()` 异步获取 JSON 数据
|
||
- `await anyio.to_thread.run_sync()` 在线程池中执行同步函数
|
||
- 详细说明见 [FastAPI 学习文档](./FASTAPI_LEARNING.md#异步编程)
|
||
|
||
### Q: 项目中的任务队列是如何工作的?
|
||
|
||
**A:**
|
||
- 使用 Python 的 `Queue` 和 `threading` 实现
|
||
- 请求到达后,任务放入队列
|
||
- 后台线程处理任务
|
||
- 使用 `anyio.to_thread.run_sync()` 等待结果
|
||
- 详细说明见 [FastAPI 学习文档](./FASTAPI_LEARNING.md#项目中的-fastapi-使用)
|
||
|
||
### Q: 如何添加新的 API 端点?
|
||
|
||
**A:**
|
||
1. 在 `main.py` 中添加路由函数
|
||
2. 在 `get_action_map()` 中注册操作(如果需要)
|
||
3. 参考 [快速参考指南](./FASTAPI_QUICK_REFERENCE.md#路由定义)
|
||
|
||
---
|
||
|
||
## 🎓 学习检查清单
|
||
|
||
### 基础理解
|
||
- [ ] 理解 FastAPI 的基本概念
|
||
- [ ] 理解 Flask vs FastAPI 的区别
|
||
- [ ] 能够创建简单的路由
|
||
- [ ] 理解异步编程(async/await)
|
||
|
||
### 项目理解
|
||
- [ ] 理解项目结构
|
||
- [ ] 理解应用初始化流程
|
||
- [ ] 理解路由处理逻辑
|
||
- [ ] 理解任务队列机制
|
||
|
||
### 实践能力
|
||
- [ ] 能够添加新的路由
|
||
- [ ] 能够使用 Pydantic 进行数据验证
|
||
- [ ] 能够处理错误
|
||
- [ ] 能够使用应用状态
|
||
|
||
### 深入学习
|
||
- [ ] 理解依赖注入
|
||
- [ ] 理解中间件
|
||
- [ ] 理解生命周期事件
|
||
- [ ] 能够优化代码性能
|
||
|
||
---
|
||
|
||
## 📝 更新日志
|
||
|
||
- **2024-01-XX**: 创建 FastAPI 学习文档集合
|
||
- 添加 FastAPI 学习文档
|
||
- 添加快速参考指南
|
||
- 添加 Flask 到 FastAPI 迁移指南
|
||
|
||
---
|
||
|
||
## 🤝 贡献
|
||
|
||
如果你发现文档中有错误或需要改进的地方,欢迎提出建议!
|
||
|
||
---
|
||
|
||
**祝你学习愉快!** 🎉
|
||
|
||
如有问题,请参考相应的文档或查看 FastAPI 官方文档。
|
||
|