返回

FastAPI中响应模型和状态码的应用

闲谈

响应模型

在FastAPI中,响应模型用于定义API返回的数据结构。这允许我们对API的输出进行类型检查,并确保返回的数据始终具有我们期望的结构。

定义响应模型

我们可以使用@pydantic. BaseModel装饰器来定义响应模型。例如,我们可以定义一个用于表示用户数据的响应模型如下:

from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str
    email: str

这个模型定义了一个User类,其中包含三个字段:idnameemail。这些字段都是必填字段,并且具有特定的数据类型。

使用响应模型

一旦我们定义了响应模型,我们就可以在我们的API中使用它。例如,我们可以使用它来定义一个获取所有用户的端点如下:

from fastapi import FastAPI, HTTPException

app = FastAPI()

@app.get("/users", response_model=List[User])
async def get_users():
    # 获取所有用户的数据
    users = await get_all_users()

    # 如果没有用户,则抛出异常
    if not users:
        raise HTTPException(status_code=404, detail="No users found")

    # 返回用户数据
    return users

这个端点使用List[User]作为其响应模型。这意味着它将返回一个包含User模型实例的列表。

状态码

状态码用于指示API请求的状态。最常见的HTTP状态码包括:

  • 200 OK:请求成功
  • 400 Bad Request:请求格式错误
  • 401 Unauthorized:未授权的请求
  • 404 Not Found:请求的资源不存在
  • 500 Internal Server Error:服务器内部错误

使用状态码

我们可以使用status_code参数来指定API请求的状态码。例如,我们可以使用它来处理找不到资源的情况如下:

from fastapi import FastAPI, HTTPException

app = FastAPI()

@app.get("/users/{user_id}", response_model=User)
async def get_user(user_id: int):
    # 获取用户数据
    user = await get_user_by_id(user_id)

    # 如果用户不存在,则抛出异常
    if not user:
        raise HTTPException(status_code=404, detail="User not found")

    # 返回用户数据
    return user

这个端点使用status_code=404来指示如果用户不存在,则会返回404状态码。

总结

在本文中,我们学习了如何在FastAPI中使用响应模型和状态码。我们了解了如何使用@pydantic. BaseModel装饰器来定义响应模型,以及如何使用status_code参数来指定API请求的状态码。我们还看到了如何将这些模型和状态码用于构建RESTful API。