什么是请求体(Request Body)
请求体是客户端发送到API的数据。 响应体是API发送给客户端的数据
API几乎总是必须发送一个响应体,但是客户端并不需要一直发送请求体
定义请求体,需要使用 Pydantic 模型
- 不能通过GET请求发送请求体
- 发送请求体数据,必须使用以下几种方法之一:POST(最常见)、PUT、DELETE、PATCH
如何实现请求体
实现请求体总共包含三个步骤
第一步,从pydantic中导入BaseModel
from pydantic import BaseModel
第二步,创建请求体数据模型
声明请求体数据模型为一个类,且该类继承 BaseModel。所有的属性都用标准Python类。和查询参数一样:数据类型的属性如果不是必须的话,可以拥有一个默认值或者是可选None。否则,该属性就是必须的
例如,声明了一个JSON对象
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
所以访问链接的时候传入的请求体可以是下面两种
{
"name": "Foo",
"description": "An optional description",
"price": 45.2,
"tax": 3.5
}
另一种可以不传递默认值或者是可选值,(注意字典后面最后一个元素不需要逗号)
{
"name": "Foo",
"price": 45.2
}
第三步、将模型定义为参数
将上面定义的模型添加到路径操作中,就和定义Path和Query参数一样的方式
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
async def create_item(item: Item):
return item
声明参数的类型为你创建的模型 Item
使用请求体模型
在函数内部,可以直接访问模型对象的所有属性
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
async def create_item(item: Item):
return item.name
- 可以同时定义路径参数和请求体参数
- 可以同时定义路径参数和查询参数和请求体参数,如果path中声明了某个参数,那么这个参数将作为路径参数是使用;如果参数是 单一类型(例如int,float,str,str,bool等),它将被解释为 query参数