# 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 官方文档。