🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

一、基础定义与用法

1. 语法与自动类型转换

2. 必填性与默认行为

二、高级验证与文档集成

1. 使用 Path 添加校验规则

2. 枚举类型约束

三、关键注意事项

1. 路由顺序优先级

2. 参数名严格匹配

3. 与查询参数的区别

总结


img

FastAPI 路径参数是 直接嵌入在 URL 路径中的动态变量,用于唯一标识资源(如用户 ID、商品编号),必须存在于请求路径中且默认必填。其核心特点是通过类型注解自动完成数据转换与校验,错误时直接返回 422 错误,无需手动处理。以下结合关键点展开说明:


一、基础定义与用法

1. 语法与自动类型转换

  • 路径参数通过 {参数名} 定义在路由路径中,函数参数需同名声明类型,FastAPI 会自动解析并转换类型。
  • 若类型不匹配(如传入字符串到 int 参数),直接返回 422 错误,无需额外校验逻辑。
    from fastapi import FastAPI
    app = FastAPI()
    
    @app.get("/items/{item_id}")
    async def read_item(item_id: int):  # 声明 item_id 为 int 类型
        return {"item_id": item_id}
    
    • 访问 /items/42 → 正常返回 {"item_id": 42}(字符串 "42" 自动转为整数)。
    • 访问 /items/abc → 返回 422 错误"value is not a valid integer")。

2. 必填性与默认行为

  • 路径参数默认必填,未提供时会触发 404 路由匹配失败(而非 422 错误)。
  • 不可设置默认值(如 item_id: int = 10 会导致路由定义无效),必须通过路径动态传递。

二、高级验证与文档集成

1. 使用 Path 添加校验规则

通过 fastapi.Path 为参数添加范围、长度等约束,规则会自动同步到 OpenAPI 文档(如 Swagger UI):

from fastapi import Path

@app.get("/items/{item_id}")
async def read_item(
    item_id: int = Path(
        ...,  # 表示必填
        ge=1,  # 最小值 1
        le=1000,  # 最大值 1000
        description="商品 ID 范围 1-1000"
    )
):
    return {"item_id": item_id}
  • 关键校验参数
    • 数值范围:ge(≥)、gt(>)、le(≤)、lt(<)。
    • 字符串长度:min_lengthmax_length
    • 正则匹配:regex(如 r"^[A-Z]{2}\d{4}$")。

2. 枚举类型约束

对有限集合的路径参数,可使用 Enum 限定合法值:

from enum import Enum

class Role(str, Enum):
    admin = "admin"
    user = "user"

@app.get("/roles/{role}")
async def get_role(role: Role):  # 仅接受 "admin" 或 "user"
    return {"role": role}
  • 传入非法值(如 /roles/guest)会触发 422 错误

三、关键注意事项

1. 路由顺序优先级

  • 具体路径必须声明在动态路径之前,否则会被误匹配为路径参数。
    # 正确顺序:先具体路径,再动态路径
    @app.get("/users/me")  # 优先匹配
    async def get_current_user():
        ...
    
    @app.get("/users/{user_id}")  # 后匹配
    async def get_user(user_id: int):
        ...
    
    • 若调换顺序,访问 /users/me 会尝试将 "me" 转为 int,导致 422 错误

2. 参数名严格匹配

  • 函数参数名必须与路径中 {} 内名称完全一致,否则无法注入值(如路径 {user_id} 但函数参数写 user_id1 会导致 404)。

3. 与查询参数的区别

  • 路径参数:位于 URL 路径中(如 /items/{id}),必填且影响路由匹配
  • 查询参数:位于 ? 之后(如 ?page=1),可选且不影响路由匹配,默认值通过 = None= 0 设置。

总结

FastAPI 路径参数的核心价值在于 通过类型注解实现自动校验与文档生成,开发者只需声明参数类型和约束,框架会处理转换、错误响应及 API 文档同步。需特别注意 必填性、路由顺序和参数名一致性,避免常见陷阱。实际开发中,结合 Path 的校验规则能显著提升接口健壮性。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐