简道云fastapi
This commit is contained in:
@@ -0,0 +1,352 @@
|
||||
# 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 官方文档。
|
||||
|
||||
Reference in New Issue
Block a user