Python 语言 FastAPI 动态生成 Swagger 文档的参数校验配置

Python阿木 发布于 1 天前 2 次阅读


FastAPI 动态生成 Swagger 文档的参数校验配置

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,由 Python 3.6+ 支持。它具有异步支持,并且与 Starlette 和 Pydantic 集成。Swagger 文档是描述 API 的一个标准,它可以帮助开发者更好地理解和使用 API。FastAPI 提供了内置的 Swagger UI,可以自动生成 API 文档。对于参数校验,FastAPI 默认的 Swagger 文档可能不会显示详细的校验信息。本文将探讨如何使用代码编辑模型围绕 Python 语言 FastAPI 动态生成 Swagger 文档的参数校验配置。

FastAPI 简介

FastAPI 是一个高性能的 Web 框架,它结合了异步编程、类型提示和 Pydantic。以下是一些 FastAPI 的关键特性:

- 异步支持:FastAPI 使用异步编程,这意味着它可以同时处理多个请求。
- 类型提示:FastAPI 允许使用 Python 类型提示来定义请求和响应的数据结构。
- Pydantic 集成:FastAPI 使用 Pydantic 来验证和序列化数据。
- 自动文档:FastAPI 提供了内置的 Swagger UI,可以自动生成 API 文档。

参数校验配置

在 FastAPI 中,参数校验通常是通过 Pydantic 模型来实现的。Pydantic 模型可以定义数据结构,并自动进行数据验证。以下是一个简单的 Pydantic 模型示例:

python
from pydantic import BaseModel, EmailStr

class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
email: EmailStr = None

在这个模型中,我们定义了一个名为 `Item` 的 Pydantic 模型,它包含四个字段:`name`、`description`、`price` 和 `tax`。`email` 字段使用了 `EmailStr` 类型,它会自动验证电子邮件格式。

动态生成 Swagger 文档

FastAPI 自动生成 Swagger 文档,但是默认情况下,它可能不会显示详细的参数校验信息。为了解决这个问题,我们可以使用 FastAPI 的 `Response` 和 `Pydantic` 的 `Config` 类来扩展 Swagger 文档。

1. 使用 Pydantic 的 `Config`

Pydantic 的 `Config` 类允许我们自定义 Pydantic 模型的行为。我们可以通过设置 `config` 参数来启用 Pydantic 的 `__config__` 属性,这将允许我们访问 Pydantic 模型的配置信息。

以下是如何在 Pydantic 模型中设置 `Config`:

python
from pydantic import BaseModel, EmailStr

class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
email: EmailStr = None

class Config:
orm_mode = True

2. 使用 FastAPI 的 `Response`

FastAPI 的 `Response` 类允许我们自定义响应体。我们可以使用 `Response` 来包含 Pydantic 模型的校验信息。

以下是如何在 FastAPI 路由中返回 Pydantic 模型的校验信息:

python
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
email: EmailStr = None

@app.post("/items/")
async def create_item(item: Item):
if item.price < 0:
raise HTTPException(status_code=400, detail="Price must be positive")
return item

在这个例子中,我们创建了一个名为 `/items/` 的 POST 路由,它接受一个 `Item` 对象。如果 `price` 字段小于 0,我们抛出一个 `HTTPException`。

3. 生成 Swagger 文档

现在,我们已经配置了参数校验和响应体,FastAPI 将自动生成包含校验信息的 Swagger 文档。你可以通过访问 `http:///docs` 来查看生成的文档。

总结

本文介绍了如何使用 FastAPI 和 Pydantic 来动态生成包含参数校验配置的 Swagger 文档。通过设置 Pydantic 模型的 `Config` 和使用 FastAPI 的 `Response` 类,我们可以确保 Swagger 文档中包含详细的校验信息。这对于开发者来说非常有用,因为它可以帮助他们更好地理解和使用 API。

在接下来的文章中,我们可以进一步探讨如何自定义 Swagger 文档的样式和内容,以及如何与其他工具和库集成以增强 API 的文档和验证功能。