FastAPI和Pydantic搭配使用非常紧密,Pydantic用于数据验证和序列化,而FastAPI则用于快速构建API接口。两者结合的优势在于:
- 数据验证:FastAPI使用Pydantic模型来自动验证和解析请求体中的数据。
- 自动生成文档:FastAPI基于Pydantic模型生成API文档(Swagger UI),自动显示字段类型和校验规则。
- 清晰简洁:通过Pydantic,数据验证与API接口的定义是分开的,使代码清晰、结构化。
示例:构建一个简单的用户注册接口
1. 安装依赖
pip install fastapi pydantic uvicorn
2. 代码实现
from fastapi import FastAPI
from pydantic import BaseModel, EmailStr
from typing import Optional
# 定义 Pydantic 数据模型
class User(BaseModel):
username: str
email: EmailStr
full_name: Optional[str] = None
password: str
# 创建 FastAPI 实例
app = FastAPI()
# 创建注册接口
@app.post("/register")
async def register(user: User):
# 模拟处理注册逻辑
return {"message": f"User {user.username} registered successfully!"}
# 启动服务时,使用 uvicorn
3. 运行应用
使用以下命令启动FastAPI应用:
uvicorn main:app --reload
4. 测试接口
- 访问
http://127.0.0.1:8000/docs,可以看到自动生成的Swagger UI界面。 - 点击
POST /register,在请求体中输入数据,例如:
{
"username": "john_doe",
"email": "john.doe@example.com",
"password": "secret_password"
}
- 提交请求,返回的响应是:
{
"message": "User john_doe registered successfully!"
}
关键点:
- Pydantic 数据模型:
User类用于验证请求体中的数据。字段的类型(如str、EmailStr)和验证规则自动由Pydantic处理。 - FastAPI自动文档生成:接口文档通过Pydantic模型自动生成,显示字段的类型和要求,帮助用户更好地理解API的输入输出结构。
- 灵活性:通过Pydantic的
Optional,可以定义可选字段,增强接口的灵活性。
总结:
通过结合FastAPI和Pydantic,我们可以实现清晰且功能强大的API接口,提供自动验证、自动文档生成,减少重复代码,并且保证数据的正确性和安全性。
这种结合是FastAPI中非常重要的一个特色,也是其高效开发的原因之一。