11 FastAPI文档自定义

FastAPI 提供了自动生成 API 文档的功能,但它不仅仅限于自动生成的文档。你还可以对 API 文档进行高度自定义,以便让 API 接口的描述更加清晰,帮助开发者和前端更好地理解如何与 API 交互。

本文将介绍如何自定义 API 路由描述信息为参数添加描述与例子 ,以及如何定制 响应模型的文档。通过这些自定义功能,你可以让 API 文档更符合业务需求和团队的开发标准。

1. 自定义 API 路由的描述信息

在 FastAPI 中,每个 API 路由(也就是请求路径)都可以附带描述信息,帮助开发者更好地理解接口的用途和行为。你可以使用 description 参数来为路由添加简要说明。

1.1 自定义描述

当你定义一个路由时,可以通过 description 参数为该路由添加详细的描述。以下是一个简单示例:

python 复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}", description="获取指定 ID 的商品信息。")
async def read_item(item_id: int, query: str = None):
    """
    - `item_id`: 商品的唯一标识符。
    - `query`: 可选的查询字符串,用于搜索商品。
    """
    return {"item_id": item_id, "query": query}

在这个例子中:

  • 我们使用 description 参数为 GET /items/{item_id} 路由添加了说明:"获取指定 ID 的商品信息"。
  • 在函数内部,我们也通过文档字符串进一步说明了路由参数的含义。

当你访问 http://127.0.0.1:8000/docs 时,你将看到该路由的描述信息出现在文档中。

1.2 自定义操作描述

FastAPI 还允许你为 HTTP 操作(如 GETPOSTPUT 等)指定操作描述。使用 summarydescription 来描述该操作的总体目标和具体细节。

python 复制代码
@app.post("/items/", summary="创建新商品", description="提供商品信息并创建一个新的商品记录。")
async def create_item(item: Item):
    return {"item_name": item.name, "item_price": item.price}

在这里:

  • summary 给出了操作的简短标题。
  • description 提供了对操作的详细说明。

2. 为参数添加描述与例子

FastAPI 支持为 API 参数添加详细描述以及示例。通过为请求参数添加 descriptionexample,你可以使 API 文档更加易于理解。

2.1 为路径参数添加描述与例子

你可以为路径参数(如 URL 中的 {item_id})添加详细的描述信息。

python 复制代码
@app.get("/items/{item_id}")
async def read_item(item_id: int = Path(..., description="商品的唯一标识符", example=123)):
    return {"item_id": item_id}

在上面的代码中:

  • Path 用于定义路径参数。
  • description 参数描述了 item_id 的含义。
  • example 为该参数提供了一个示例值,在文档中展示给用户参考。

2.2 为查询参数添加描述与例子

除了路径参数,我们还可以为查询参数(如 query)添加描述和示例。

python 复制代码
from fastapi import Query

@app.get("/items/")
async def read_item(query: str = Query(None, description="搜索商品的查询字符串", example="laptop")):
    return {"query": query}

在这里,Query 允许我们设置查询参数的描述和示例。查询参数 query 被描述为"搜索商品的查询字符串",并提供了一个示例值 "laptop"

2.3 为请求体的参数添加描述与例子

对于请求体(如 JSON 数据),你可以通过 Pydantic 模型来定义并添加详细描述。

python 复制代码
from pydantic import BaseModel

class Item(BaseModel):
    name: str = Field(..., description="商品名称", example="Laptop")
    price: float = Field(..., description="商品价格", example=1200.99)

@app.post("/items/")
async def create_item(item: Item):
    return {"item_name": item.name, "item_price": item.price}

在这个例子中,Item 模型使用 Field 来为 nameprice 字段添加描述和示例。这样,API 文档中会自动展示这些信息,帮助使用者理解请求体的结构和每个字段的含义。

3. 定制响应模型的文档

FastAPI 同样支持定制响应模型的文档,这可以帮助前端开发人员或 API 用户了解返回的数据结构。通过 Pydantic 模型,你可以为 API 的响应添加描述、示例以及详细的字段说明。

3.1 定义响应模型

假设我们定义一个返回商品信息的响应模型:

python 复制代码
from pydantic import BaseModel

class ItemResponse(BaseModel):
    item_id: int
    name: str
    price: float

    class Config:
        schema_extra = {
            "example": {
                "item_id": 123,
                "name": "Laptop",
                "price": 1200.99
            }
        }

在上面的代码中:

  • ItemResponse 是一个 Pydantic 模型,用于描述响应的结构。
  • schema_extra 用来提供一个响应的示例,帮助 API 用户了解返回的数据格式。

3.2 在路由中使用响应模型

在路由中,我们可以通过 response_model 参数来指定响应的 Pydantic 模型:

python 复制代码
@app.get("/items/{item_id}", response_model=ItemResponse)
async def read_item(item_id: int):
    return {"item_id": item_id, "name": "Laptop", "price": 1200.99}

此时,访问 API 文档时,FastAPI 会自动展示 ItemResponse 模型的结构、字段描述以及示例数据。

3.3 定制不同状态码的响应文档

除了常规的成功响应外,FastAPI 还允许你为不同的 HTTP 状态码(如 400、404)定义响应模型。这对于详细描述错误响应非常有用。

python 复制代码
from fastapi import HTTPException

@app.get("/items/{item_id}", response_model=ItemResponse, responses={404: {"description": "Item not found", "content": {"application/json": {"example": {"detail": "Item not found"}}}}})
async def read_item(item_id: int):
    if item_id != 123:
        raise HTTPException(status_code=404, detail="Item not found")
    return {"item_id": item_id, "name": "Laptop", "price": 1200.99}

在上面的代码中,我们为 404 错误添加了一个响应模型,定义了返回的错误消息格式和示例。这会使得 API 用户在查看文档时,能够清楚地了解当请求失败时返回的错误结构。

FastAPI 提供了非常灵活的 API 文档定制功能。通过 descriptionsummaryexampleField 等参数,你可以:

  • 自定义路由描述,使 API 文档更清晰、易懂。
  • 为请求参数添加描述与示例,帮助使用者理解如何传递请求数据。
  • 定制响应模型的文档,让前端开发人员清楚地了解接口的返回结构和示例数据。

这些功能不仅使得 FastAPI 自动生成的文档更加完整、易用,而且还提高了开发团队与前端人员、第三方使用者之间的协作效率。通过这些自定义选项,FastAPI 可以帮助你生成高度可读、可交互的 API 文档,提升开发体验和用户体验。

相关推荐
drebander1 天前
[特殊字符] 基于 FastAPI 和 React 构建车牌号识别网站
前端·react.js·fastapi
m0_748232922 天前
纯 Python、Django、FastAPI、Flask、Pyramid、Jupyter、dbt 解析和差异分析
python·django·fastapi
一见已难忘4 天前
Flask与FastAPI对比选择最佳Python Web框架的指南
python·flask·fastapi
亿牛云爬虫专家6 天前
FastAPI与Selenium:打造高效的Web数据抓取服务
爬虫·python·selenium·fastapi·图片·代理ip·pixabay
股票数据接口7 天前
2025年度Python最新整理的免费股票数据API接口
开发语言·python·fastapi
老大白菜9 天前
在 Ubuntu 中使用 FastAPI 创建一个简单的 Web 应用程序
前端·ubuntu·fastapi
_.Switch19 天前
Python Web开发:使用FastAPI构建视频流媒体平台
开发语言·前端·python·微服务·架构·fastapi·媒体
ghostwritten20 天前
Python FastAPI 实战应用指南
开发语言·python·fastapi
殷丿grd_志鹏23 天前
SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——主目录(持续更新)
vue.js·人工智能·python·spring cloud·fastapi