在使用FastApi在定义一个请求时,对请求的参数声明使用的是pydantic库中BaseModel,pydantic是一个非常擅长数据效验的库,看代码实例如下:

from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class StudentItem(BaseModel):
    """
    定义一个StudentItem的请求体
    其中,如果对参数进行初始化,则为可选参数,在url请求中,可以不使用
    """
    name: str  # 姓名,必选
    age: int  # 年龄,必选
    score: Union[int, None] = None  # 分数,可选


@app.post("/get_student_info/{student_id}")
async def get_student_info(student_id: int, item: StudentItem):
    """
    获取学生信息的接口
    :param student_id:
    :param item:
    :return:
    """
    return {
        "id": student_id,
        "name": item.name,
        "age": item.age
    }

在这段代码中,我们先定义了一个StudentItem的类,该类定义了三个变量,其中name,age是必须的,没有进行初始化,所以在请求或url构造中,必须要填写的字段,而score进行了初始化,所以是一个可选的,在构造请求或url中,可以不用填写。然后,定义了get_student_info的路由,里面演示了StudentItem的使用,

另外,Union的作用用来标识变量的是多类型,类型限定为Union右边中括号中的类型。

使用Doc交互式的API接口调试功能来测试该接口

以上就是我们构造的数据来准备请求这个/get_student_info这个接口,在这里的构造的StudentItem数据中,我们没有对score来进行复制和定义,因为他是可选的,所以,我们在这里可以不使用。

上面是调用这个接口的结果图片,可以看到是正常返回的结果。