FastAPI 请求体和数据模型
本章将带你掌握 FastAPI 中如何处理 请求体(Request Body),以及如何使用 Pydantic 模型 来定义、验证和自动文档化请求数据。你将学会接收 JSON 格式的对象数据,并构建强类型、安全的 API 接口。
什么是请求体?
在 HTTP 协议中,请求体是指通过 POST、PUT、PATCH 等方法发送的数据内容,通常是以 JSON、Form 表单或其他格式传输。
在 FastAPI 中,你可以通过定义函数参数为一个 Pydantic 模型,来接收请求体中的 JSON 数据。
使用 Pydantic 模型接收请求体
FastAPI 与 Pydantic 深度集成,推荐使用它来定义数据结构、自动校验类型。
示例:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = None
price: float
in_stock: bool = True
@app.post("/items/")
def create_item(item: Item):
return {"message": "Item received", "item": item}
请求示例:
{
"name": "Apple",
"description": "Fresh red apple",
"price": 3.5,
"in_stock": true
}
发出 POST 请求:
curl -X POST "http://127.0.0.1:8000/items/" \
-H "Content-Type: application/json" \
-d '{"name": "Apple", "description": "Fresh red apple", "price": 3.5, "in_stock": true}'
说明:
Item是一个继承自BaseModel的类,表示请求数据的结构。- FastAPI 会自动解析请求体为
Item实例,并做类型校验。 - 如果缺少必须字段,或者字段类型不匹配,会自动返回
422 Unprocessable Entity错误。
请求体参数的类型说明
在 FastAPI 中,请求体参数 是通过 Pydantic 模型定义的,而 Pydantic 使用 Python 的类型注解来自动完成类型验证和转换。下面我们来详细了解每种常用类型及其用途。