⚡ FastAPI:现代高性能异步 Web 框架
FastAPI 是基于 Python 3.6+ 类型注解构建的高性能 Web 框架,适合构建 API 服务,支持异步、自动文档生成、依赖注入等。
✅ FastAPI 解决了什么问题?
问题 | FastAPI 的解决方式 |
---|---|
开发 API 繁琐 | 使用路径装饰器快速创建接口 |
文档编写难 | 自动生成 Swagger 和 ReDoc |
异步性能需求 | 内建支持 async / await |
参数校验复杂 | 利用 Pydantic 自动校验和解析请求参数 |
类型提示与 IDE 支持不佳 | 强类型注解,IDE 友好 |
🧰 安装 FastAPI 和 Uvicorn
pip install fastapi[all]
或者只安装核心依赖:
pip install fastapi
pip install "uvicorn[standard]"
🚀 快速启动一个接口服务
创建 main.py
:
从 fastapi 导入 FastAPI
app = FastAPI()
@app.get("/")
定义 根():
返回 {"消息": "你好 FastAPI"}
启动服务:
uvicorn main:app --reload
访问:
- 接口地址:http://127.0.0.1:8000
- 文档界面:http://127.0.0.1:8000/docs
- ReDoc 文档:http://127.0.0.1:8000/redoc
📥 路径参数与查询参数
@app.get("/用户/{用户id}")
定义 获取用户(用户id: int, 详细: bool = False):
如果 详细:
返回 {"用户id": 用户id, "详情": "详细信息"}
返回 {"用户id": 用户id}
📦 请求体(Body)与 Pydantic 模型
从 pydantic 导入 BaseModel
类 用户(BaseModel):
姓名: str
年龄: int
@app.post("/用户/")
定义 创建用户(用户: 用户):
返回 {"创建成功": 用户.姓名}
🧱 路由分离与模块化
创建 routers/user.py
:
从 fastapi 导入 APIRouter
路由 = APIRouter()
@路由.get("/列表")
定义 获取用户列表():
返回 [{"姓名": "小明"}, {"姓名": "小红"}]
注册子路由 main.py
:
从 fastapi 导入 FastAPI
从 routers 导入 user
app = FastAPI()
app.include_router(user.路由, prefix="/用户")
⚙️ 请求校验与默认值
FastAPI 自动对请求参数进行校验与默认处理:
从 fastapi 导入 Query
@app.get("/搜索/")
定义 搜索关键字(q: str = Query(..., min_length=2)):
返回 {"搜索": q}
🔐 用户认证(示例)
从 fastapi 导入 Depends, HTTPException
从 fastapi.security 导入 OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
定义 当前用户(token: str = Depends(oauth2_scheme)):
如果 token != "mysecrettoken":
抛出 HTTPException(状态码=401, 详情="无权限")
返回 {"用户名": "admin"}
🧪 自动文档与参数说明
访问:http://127.0.0.1:8000/docs 自动生成 Swagger UI。
@app.get("/项目/", tags=["项目"])
定义 获取项目(名称: str = "默认项目"):
"""获取指定项目"""
返回 {"项目": 名称}
📈 异步支持
FastAPI 原生支持异步请求:
从 asyncio 导入 sleep
@app.get("/延迟/")
异步 定义 模拟延迟():
等待 sleep(1)
返回 {"状态": "完成"}
🧰 常用命令与工具
工具 | 说明 |
---|---|
uvicorn | 启动 FastAPI 服务 |
pydantic | 定义数据模型,自动验证 |
requests | 调试接口的好搭档 |
/docs | Swagger 文档界面 |
/redoc | 另一个自动文档界面 |