一、FastAPI 简介
FastAPI 是 Python 生态中 高性能、异步驱动的现代 Web 框架,专为构建 API 设计。其基于 Starlette(高性能 ASGI 框架)和 Pydantic(数据验证库),结合 Python 类型提示特性,提供极速开发体验。截至 2025 年,FastAPI 已成为 GitHub 最活跃的 Python Web 框架之一,被 Netflix、Uber 等企业用于构建微服务和高并发系统。
核心优势:
- 性能卓越:异步支持与底层优化使其性能接近 Go 和 Node.js,远超 Flask 和 Django。
- 开发高效:通过类型提示自动生成数据验证、序列化和 API 文档,减少 40% 以上编码错误。
- 标准化兼容:完全支持 OpenAPI 和 JSON Schema,自动生成交互式文档(Swagger UI/ReDoc)。
- 模块化扩展:依赖注入、中间件和插件机制支持复杂功能扩展(如 JWT 认证、WebSocket)。
二、核心特性与架构
1. 高性能异步引擎
- ASGI 支持:基于异步服务器网关接口,原生支持
async/await
,适用于高并发场景(如实时数据处理)。 - 请求吞吐量:单机可处理每秒数千次请求,性能测试显示其响应时间比 Flask 快 3 倍以上。
2. 类型提示与数据验证
- Pydantic 集成:通过 Python 类型注解自动验证请求参数和响应数据,支持嵌套模型和自定义校验规则。
python
说明:若输入不符合规则,FastAPI 自动返回 422 错误及详细原因。from pydantic import BaseModel class User(BaseModel): name: str = Field(min_length=3) age: int = Field(gt=0)
3. 自动文档生成
- 交互式文档:访问
/docs
或/redoc
路径可查看实时 API 文档,支持在线测试接口。 - 代码即文档:函数参数和返回值类型提示直接映射为文档说明,无需手动维护。
三、安装与基础用法
1. 安装命令
bash
pip install fastapi uvicorn[standard] # 标准安装(含异步支持)
2. 最小应用示例
python
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello FastAPI!"}
# 启动命令:uvicorn main:app --reload
说明:--reload
启用开发模式热更新,访问 http://localhost:8000/docs
查看文档。
四、常用函数与核心功能
1. 路由定义与请求处理
函数/装饰器 | 功能描述 | 示例 |
---|---|---|
**@app.get(path) ** | 定义 GET 请求路由,支持路径参数和查询参数 | @app.get("/items/{item_id}") |
**@app.post(path) ** | 处理 POST 请求,通常用于提交表单或 JSON 数据 | @app.post("/users/") |
**@app.put(path) ** | 更新资源 | @app.put("/items/{item_id}") |
**@app.delete(path) ** | 删除资源 | @app.delete("/items/{item_id}") |
参数类型:
- 路径参数:通过
{变量名}
捕获 URL 动态值,支持类型转换(如int
)。python
@app.get("/users/{user_id}") async def read_user(user_id: int): return {"user_id": user_id}
- 查询参数:未在路径中声明的参数自动识别为查询参数。
python
@app.get("/items/") async def read_items(skip: int = 0, limit: int = 10): return {"skip": skip, "limit": limit}
2. 请求体与数据模型
- Pydantic 模型:定义请求体结构并自动验证。
python
class Item(BaseModel): name: str price: float is_offer: bool = None @app.post("/items/") async def create_item(item: Item): return item
- 文件上传:通过
File
和UploadFile
处理多文件上传。python
from fastapi import UploadFile, File @app.post("/upload/") async def upload_file(file: UploadFile = File(...)): return {"filename": file.filename}
3. 依赖注入系统
- 功能:解耦业务逻辑,复用公共组件(如数据库连接、权限验证)。
python
from fastapi import Depends async def get_token(token: str = Header(...)): if token != "secret": raise HTTPException(status_code=401) return token @app.get("/protected/") async def protected_route(token: str = Depends(get_token)): return {"status": "authenticated"}
4. 异步任务与后台处理
- BackgroundTasks:处理耗时操作(如发送邮件、日志记录),避免阻塞主线程。
python
from fastapi import BackgroundTasks def write_log(message: str): with open("log.txt", "a") as f: f.write(f"{message}\n") @app.post("/notify/") async def send_notification( message: str, background_tasks: BackgroundTasks ): background_tasks.add_task(write_log, message) return {"message": "Notification sent"}
五、应用场景
- AI 服务接口:集成 PyTorch/TensorFlow 模型,提供预测 API(如情感分析、图像识别)。
- 用户认证系统:通过 JWT 实现登录、注册和权限管理。
- 实时数据处理:结合 WebSocket 构建聊天室或实时监控仪表盘。
- 微服务架构:作为轻量级服务节点,与 Kubernetes 集成实现弹性扩缩容。
- 企业级后台:集成 SQLAlchemy 和 Celery,处理订单管理、报表生成等复杂业务。
六、注意事项
- 性能优化:
- 使用
async
函数处理 I/O 密集型任务。 - 启用缓存(如 Redis)减少数据库查询压力。
- 使用
- 安全实践:
- 配置 CORS 中间件限制跨域请求。
- 使用 HTTPS 和 JWT 签名防止数据篡改。
- 生产部署:
- 关闭调试模式(
--reload
),通过 Gunicorn 启动多进程。 - 集成 Prometheus 监控接口性能和错误率。
- 关闭调试模式(