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=fastapiq必填,page=1,size=10,sort=null
/search?q=python&page=3&size=20覆盖默认值,sort仍为null
/search?q=test&sort=pricepage/size用默认值,sort=price
/search返回422错误(缺少必填参数q)
/configdebug=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状态码及错误详情。
客户端 HTTP 请求 FastAPI 端点 /search /config 查询参数解析 q: str (必填) page: int = 1 size: int = 10 sort: Optional[str] = None 默认值处理 未传 page → 使用 1 未传 size → 使用 10 未传 sort → None ?q=fastapi 返回 JSON 响应 响应示例 {"query": "fastapi", "page": 1, "size": 10, "sort": null}

关键说明

  • 必填参数:声明为q: str(无默认值),客户端必须提供,否则FastAPI自动返回422错误;
  • 默认值参数:page: int = 1表示未传时自动使用1,类型不匹配时返回422;
  • 可选参数:Optional[str] = None允许参数缺失,缺失时值为None;
  • 类型校验:FastAPI自动校验参数类型,如page=abc会返回422错误而非运行时异常。