芬叭种毕? FastAPI是什么FastAPI是一个基于Python 3.6类型提示的现代Web框架专为构建高性能API设计。它由Sebastián Ramírez开发融合了StarletteASGI框架和Pydantic数据验证让你用更少的代码实现更多功能。核心特点一览- 极高性能支持异步编程速度媲美Node.js和Go轻松处理高并发请求。- 开发效率高自动生成交互式API文档Swagger UI和ReDoc减少手动编写文档的麻烦。- 类型安全利用Python类型提示进行自动数据验证和序列化提升代码可维护性。- 易于学习设计简洁文档清晰即使新手也能快速入门。?? 快速上手一个最小示例只需几步你就能跑起第一个FastAPI应用。首先安装必备库uv add fastapi uvicorn[standard]接着创建一个名为main.py的文件并写入以下代码from fastapi import FastAPIapp FastAPI()app.get(/)def read_root():return {Hello: World}app.get(/items/{item_id})def read_item(item_id: int, q: str None):return {item_id: item_id, q: q}运行应用uv run uvicorn main:app --reload打开浏览器访问 http://127.0.0.1:8000 会看到JSON响应访问 http://127.0.0.1:8000/docs 即可使用自动生成的交互式文档测试API端点。是不是很简单?? 常用文件结构随着项目变大良好的文件结构能提升可维护性。以下是推荐的FastAPI项目布局my_project/├── .venv/├── app/│ ├── __init__.py│ ├── main.py # 创建FastAPI实例和主路由│ ├── api/ # 存放所有路由端点│ │ ├── __init__.py│ │ ├── items.py # 示例商品相关端点│ │ └── users.py # 示例用户相关端点│ ├── models/ # SQLAlchemy等ORM模型可选│ ├── schemas/ # Pydantic模型用于数据验证│ ├── core/ # 核心配置如数据库连接、设置│ └── utils/ # 工具函数├── tests/ # 测试文件├── pyproject.toml└── README.md这种结构清晰分离关注点main.py初始化应用api/处理路由schemas/定义数据模式。例如在api/items.py中from fastapi import APIRouterrouter APIRouter()router.get(/items/)def get_items():return [{name: Item 1}, {name: Item 2}]然后在main.py中导入路由让项目模块化便于团队协作。?? FastAPI vs Flask优势与不足FastAPI常被拿来与Flask比较两者都是流行的Python Web框架。以下是关键对比FastAPI的优势- 性能领先基于ASGI原生支持异步适合高并发场景Flask基于WSGI通常同步运行。- 开箱即用的文档自动生成OpenAPI规范文档无需额外配置Flask需要扩展如Flask-RESTX。- 现代开发体验深度集成类型提示编辑器支持好减少运行时错误Flask更依赖约定和扩展。- 数据验证自动化通过Pydantic自动验证请求数据Flask通常需要手动处理或第三方库。FastAPI的不足- 生态系统较新Flask有更丰富的插件和社区资源FastAPI的第三方库相对较少。- 异步学习曲线如果你不熟悉异步编程可能需要时间适应Flask的同步模式更易上手。- 适用场景FastAPI更适合API驱动和微服务项目Flask在小型全栈应用或原型开发中更灵活。选择建议如果你追求高性能、现代API开发FastAPI是理想选择如果需要快速原型或依赖大量现有插件Flask可能更合适。?? 完整代码参考这里是一个综合示例包含路由、Pydantic模型和错误处理帮你巩固所学from fastapi import FastAPI, HTTPExceptionfrom pydantic import BaseModelfrom typing import Optionalapp FastAPI(title示例API, version1.0.0)class Item(BaseModel):name: strprice: floatdescription: Optional[str] Noneitems_db []app.get(/)def home():return {message: 欢迎使用FastAPI API}app.get(/items/, summary获取所有商品)def get_items():return items_dbapp.get(/items/{item_id}, summary根据ID获取商品)def get_item(item_id: int):if item_id 0 or item_id len(items_db):raise HTTPException(status_code404, detail商品未找到)return items_db[item_id]app.post(/items/, summary创建新商品)def create_item(item: Item):items_db.append(item)return {message: 商品创建成功, item: item}app.put(/items/{item_id}, summary更新商品)def update_item(item_id: int, item: Item):if item_id 0 or item_id len(items_db):raise HTTPException(status_code404, detail商品未找到)items_db[item_id] itemreturn {message: 商品更新成功, item: item}将代码保存为main.py运行后访问/docs即可测试所有端点。这个示例展示了FastAPI的路由定义、模型验证和错误处理实战性很强。