FastAPI 路由详解:路径参数、查询参数、请求体,一篇掌握!

你是否曾在编写接口时对参数处理感到迷糊?

路径参数怎么写?查询参数和请求体参数有啥区别?怎么自动类型校验、生成文档?

这篇文章将带你全面掌握 FastAPI 中最常用的三种参数类型,配合 Pydantic 验证,轻松构建高质量 API!

路径参数(Path Parameters)

路径参数出现在 URL 中,例如 /users/{user_id}。

复制
from fastapi import FastAPI app = FastAPI() @app.get("/users/{user_id}") def get_user(user_id: int): return {"user_id": user_id}1.2.3.4.5.6.7.

访问 /users/123,FastAPI 会自动将 123 转为 int 传入 user_id。

特点:

参数写在 URL 路径中自动类型转换常用于资源定位(如用户 ID)查询参数(Query Parameters)

查询参数通过 URL ? 后的键值对传递,例如 /search?q=fastapi&limit=10。

复制
@app.get("/search") def search(q: str, limit: int = 10): return {"query": q, "limit": limit}1.2.3.

访问 /search?q=fastapi&limit=5 返回:

复制
{"query": "fastapi", "limit": 5}1.

特点:

传参方式灵活,可设置默认值自动类型校验、自动文档支持常用于分页、筛选、搜索请求体参数(Request Body)

当你需要传递 JSON 对象等复杂结构,就要用请求体参数,并结合 Pydantic 定义模型。

步骤一:定义数据模型

复制
from pydantic import BaseModel class Item(BaseModel): name: str price: float tags: list[str] = []1.2.3.4.5.6.

步骤二:接收请求体

复制
@app.post("/items/") def create_item(item: Item): return item1.2.3.

发送请求:

复制
POST /items/ { "name": "iPhone 15", "price": 999.9, "tags": ["phone", "apple"] }1.2.3.4.5.6.

FastAPI 会:

自动将 JSON 转换为对象自动校验字段自动生成 API 文档混合使用(路径 + 查询 + 请求体)

三种参数可以组合使用:

复制
from typing import Union @app.put("/items/{item_id}") def update_item( item_id: int, q: Union[str, None] = None, item: Item = None ): return { "item_id": item_id, "q": q, "item": item }1.2.3.4.5.6.7.8.9.10.11.12.13.
参数验证与文档增强

FastAPI 支持通过 Query 和 Path 设置限制和文档描述:

复制
from fastapi import Query, Path @app.get("/products/{product_id}") def get_product( product_id: int = Path(..., title="产品 ID", ge=1), keyword: str = Query(None, max_length=20, description="搜索关键词") ): return {"product_id": product_id, "keyword": keyword}1.2.3.4.5.6.7.8.

支持的验证包括:

是否必填(...)数值范围(ge=1)字符长度(max_length)自动展示在 Swagger 文档中总结

类型

来源

适用场景

特点

路径参数

/users/{id}

标识资源

自动转换类型、资源定位

查询参数

?q=xxx&limit=1

筛选分页搜索

可选默认值、自动文档

请求体参数

JSON 请求体

提交复杂结构数据

使用 Pydantic 模型验证解析

FastAPI 的参数处理不仅强大,还智能、自动、文档友好,大大提升开发体验和效率!

THE END
本站服务器由亿华云赞助提供-企业级高防云服务器