前言

Path

可以为路径参数添加额外的校验和元数据,跟 Query 的参数是一毛一样的

元数据

Path 也可以添加元数据相关信息,这些信息将包含在生成的 OpenAPI 中,并由文档用户界面和外部工具使用

四种元数据参数

# 别名
alias: Optional[str] = None # 标题
title: Optional[str] = None # 描述
description: Optional[str] = None # 是否弃用
deprecated: Optional[bool] = None

实际代码

from fastapi import FastAPI, Path
from typing import Optional
import uvicorn app = FastAPI() # 元数据
@app.get("/items/{item_id}")
async def read_items(
item_id: Optional[str] = Path(
default=...,
min_length=2,
max_length=50,
regex="^菠萝$",
title="标题",
description="很长很长的描述",
deprecated=True,
)
):
return {"item_id": item_id}

校验成功的请求结果

校验失败的请求结果

查看 Swagger API 文档

重点

  • 路径参数始终是必需的,因为它必须是路径的一部分
  • 所以,Path 的 default 参数值必须设为 ...

元数据不应该使用 alias

因为路径参数并不能通过 参数名=value 的形式来传值,所以没有办法通过 alias = value 的方式给别名传值,最终将会报错

@app.get("/alias/{item_id}")
async def read_items(
item_id: Optional[str] = Path(
default=...,
alias="item_alias"
)
):
return {"item_id": item_id}

请求结果

查看 Swagger API 文档,并运行

直接在 Swagger API 文档上尝试运行也会报错,所以路径参数不要用别名哦!

函数参数排序问题

Python 会将 item_id: int = Path(...) 识别为默认参数,而 q: str 是位置参数,而位置参数不能在默认参数后面,所以爆红了

解决方案

在 Python 3.8 新除了仅限关键字参数:https://www.cnblogs.com/poloyy/p/15106522.html

@app.get("/item/{item_id}")
async def read_items(
*,
item_id: int = Path(...),
name: str):
return {"item_id": item_id, "name": name}

将 * 作为第一个参数,那么 * 后面的所有参数都会当做关键字参数处理,即使它们没有设置默认值(像 name)

正常传参的请求结果

数字类型校验

Query 和 Path 都可以添加数字校验,Query 文章并没有讲解数字校验,所以这里重点讲下

数字校验参数

# 大于
gt: Optional[float] = None # 大于等于
ge: Optional[float] = None # 小于
lt: Optional[float] = None # 小于等于
le: Optional[float] = None

实际代码

@app.get("/number/{item_id}")
async def read_items(
*,
item_id: int = Path(..., title="The IDsss", gt=10, le=20),
name: str = None):
return {"item_id": item_id, "name": name}

校验成功的请求结果

校验失败的请求结果

Query 和 Path 综合使用

@app.get("/path_query/{item_id}")
async def read_items(
*,
item_id: int = Path(..., description="path", ge=1, lt=5, example=1),
name: str,
age: float = Query(..., description="query", gt=0.0, le=10)):
return {"item_id": item_id, "age": age, "name": name}

正确传参的请求结果

注意

数字校验也可以适用于 float 类型的值

查看 Swagger API 文档

这里的 item_id 还加了个 example 参数,就是个示例值,所以在接口文档中会显示 Example

总结

  • Query、Path 和后面会讲到的 Form、Cookie...等等,都是公共 Param 类的子类,但实际开发中并不会直接使用 Param 类
  • 所有这些子类都共享相同的额外校验参数和元数据

Query 类

Path 类

Param 类

最新文章

  1. Python强化训练笔记(七)——使用deque队列以及将对象保存为文件
  2. Ubuntu Linux上安装oracle jdk
  3. LightOJ 1315 - Game of Hyper Knights(博弈sg函数)
  4. HttpClient(4.3.5) - 简单示例
  5. lantern蓝灯导致IE和一些软件不能上网解决方法
  6. 公众号的秘密,知道一个biz就够了
  7. swift基本用法-for循环遍历,遍历字典,循环生成数组
  8. PHP文件相关函数试题
  9. 关于request和response的中文乱码问题
  10. Apache常用配置
  11. dm642的中断
  12. 【NOIP2015】斗地主(搜索,贪心)
  13. RabbitMQ installation
  14. CXF安装和配置时出现Exception in thread "main" java.lang.UnsupportedClassVersionError:异常?
  15. PHP去掉html中的空行、空白函数
  16. 微信小程序,图片居中显示,适配不同机型
  17. JMeter 查看结果树监听器响应数据中文显示乱码解决方法
  18. MyBatis 中的级联
  19. Shell 基础 -- 总结几种括号、引号的用法
  20. pytho部分命令

热门文章

  1. 【Lua篇】静态代码扫描分析(二)词法分析
  2. ElasticSearch版本控制--java实现
  3. Python包安装过程
  4. AbstractRoutingDataSource -- Spring提供的轻量级数据源切换方式
  5. centos7 更新源
  6. 分享一份【饿了么】Java面试专家岗面试题,欢迎留言交流哦!
  7. NOIP 模拟 $36\; \rm Cicada 拿衣服$
  8. Anaconda安装和使用
  9. c++本地动态连接库代码
  10. chmod u+s是什么意思