3. 查询参数与默认值
任务说明
实现一个FastAPI端点,接收查询参数并支持默认值与可选参数。客户端访问时,未提供的参数使用默认值,可选参数允许缺失。
核心实现
from fastapi import FastAPI
from typing import Optional
app = FastAPI()
# 必填查询参数 + 带默认值参数 + 可选参数
@app.get("/search")
async def search_items(
q: str, # 必填查询参数
page: int = 1, # 带默认值,未传时使用1
size: int = 10, # 带默认值,未传时使用10
sort: Optional[str] = None # 可选参数,允许缺失
):
return {
"query": q,
"page": page,
"size": size,
"sort": sort,
"message": f"搜索 '{q}' 第 {page} 页,每页 {size} 条"
}
# 仅含默认值与可选参数的端点
@app.get("/config")
async def get_config(
debug: bool = False,
lang: str = "zh-CN",
: Optional[str] = None
):
return {
"debug": debug,
"lang": lang,
"_provided": is not None
}
运行与验证
启动服务:
uvicorn main:app --reload --port 8000
验证路径:启动后访问以下URL,观察返回结果。
| 请求URL | 预期行为 |
|---|---|
/search?q=fastapi | q必填,page=1,size=10,sort=null |
/search?q=python&page=3&size=20 | 覆盖默认值,sort仍为null |
/search?q=test&sort=price | page/size用默认值,sort=price |
/search | 返回422错误(缺少必填参数q) |
/config | debug=false,lang=zh-CN,_provided=false |
/config?debug=true&lang=en&=abc123 | 全部参数生效,_provided=true |
判定标准:
- 访问
/docs(Swagger UI),可见参数标记:q为必填(无默认值),page/size显示默认值,sort/标记为可选; - 不传可选参数时返回
null或false,不报错; - 缺少必填参数
q时返回422状态码及错误详情。
关键说明
- 必填参数:声明为
q: str(无默认值),客户端必须提供,否则FastAPI自动返回422错误; - 默认值参数:
page: int = 1表示未传时自动使用1,类型不匹配时返回422; - 可选参数:
Optional[str] = None允许参数缺失,缺失时值为None; - 类型校验:FastAPI自动校验参数类型,如
page=abc会返回422错误而非运行时异常。