如何在Swagger(OpenAPI)中定义互斥的查询参数?

2023-12-11

我在 Swagger 中有一系列像这样的参数

                    "parameters": [
                    {
                        "name": "username",
                        "description": "Fetch username by username/email",
                        "required": false,
                        "type": "string",
                        "paramType": "query"
                    },
                    {
                        "name": "site",
                        "description": "Fetch username by site",
                        "required": false,
                        "type": "string",
                        "paramType": "query"
                    },
                    {
                        "name": "survey",
                        "description": "Fetch username by survey",
                        "required": false,
                        "type": "string",
                        "paramType": "query"
                    }
                ],

其中一个参数必须填写,但无论哪一个都可以,其他可以留空。有没有办法在 Swagger 中表示这一点?


互斥参数是可能的(某种程度上)开放API 3.x:

  • 将互斥参数定义为对象属性,并使用oneOf or maxProperties将对象限制为只有 1 个属性。
  • Use the 参数序列化方法 style: form and explode: true,以便该对象被序列化为?propName=value.

使用的示例minProperties and maxProperties限制:

openapi: 3.0.0
...
paths:
  /foo:
    get:
      parameters:
        - in: query
          name: filter
          required: true
          style: form
          explode: true
          schema:
            type: object
            properties:
              username:
                type: string
              site:
                type: string
              survey:
                type: string
            minProperties: 1
            maxProperties: 1
            additionalProperties: false

Using oneOf:

      parameters:
        - in: query
          name: filter
          required: true
          style: form
          explode: true
          schema:
            type: object
            oneOf:
              - properties:
                  username:
                    type: string
                required: [username]
                additionalProperties: false
              - properties:
                  site:
                    type: string
                required: [site]
                additionalProperties: false
              - properties:
                  survey:
                    type: string
                required: [survey]
                additionalProperties: false

另一个版本使用oneOf:

      parameters:
        - in: query
          name: filter
          required: true
          style: form
          explode: true
          schema:
            type: object
            properties:
              username:
                type: string
              site:
                type: string
              survey:
                type: string
            additionalProperties: false
            oneOf:
              - required: [username]
              - required: [site]
              - required: [survey]

请注意,Swagger UI 和 Swagger Editor 尚不支持上述示例(截至 2018 年 3 月)。这个问题似乎涵盖了参数渲染部分。


OpenAPI 规范存储库中还有一个开放提案支持查询参数之间的相互依赖性因此,也许规范的未来版本将有更好的方法来定义此类场景。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Swagger(OpenAPI)中定义互斥的查询参数? 的相关文章

随机推荐

  • 如何获取转换后的 Windows 应用商店 UWP 应用程序的故障转储(或任何可用的故障报告)?

    我向 Windows 10 Store 提交了我的nativeWin32 应用程序是转换为 UWP应用程序使用Project Centennial转换器 该应用程序通过了商店认证 可以通过私人链接使用 当我测试它时 在运行我的测试时 应用程
  • 从 Android 内存读取 SQLITE 数据库

    我在 Java 应用程序上创建了一个 sqlite 数据库 并将其推送到我的 android 上 我想读取这个数据库 可能稍后也会写入 到目前为止 我发现的大多数教程都是在 android 中创建数据库 我认为我不需要重写 SQLiteOp
  • Rhinomocks - 嘲笑代表

    public interface IServiceInvoker R InvokeService
  • 如何在 Ruby 中创建用于深度复制/克隆对象的运算符?

    我想通过引入一个新的运算符来实现以下目标 例如 a b b 1 2 p a gt p b gt 1 gt 2 据我了解 我需要修改Object类 但我不知道该怎么做才能得到我想要的东西 require superators class Ob
  • 在 Javascript 中对日/月数组进行排序

    我正在尝试按从最新到最旧的顺序对日期数组进行排序 不幸的是 list sort 默认情况下 仅对第一个数字进行排序 我的数组如下所示 var MyArray 13 Jun 09 Jun 25 Aug 30 Jun 13 Aug 我尝试创建一
  • 如何使我的游戏引擎更快(GDI+、C#)

    我目前正在使用 GDI 用 C 构建 2D 游戏引擎 我确实知道有更好的 GDI 替代品 但我也已经深入到这个项目中 现在无法回头 因此 我目前有一个图形引擎 它可以根据我的相机位置和窗口大小来渲染位图的一部分 这给了我很大的性能提升 伟大
  • db.collectionNames 在 Node.js 中不起作用

    我想检查 Node js 中是否存在集合 我使用 db collectionNames 获取数据库中的名称列表 但什么也没发生 代码 connectDB DBURL then function db console log db conne
  • 检查套接字文件描述符是否可用?

    如果我有一个文件描述符 套接字 fd 如何检查该 fd 是否可用于读 写 在我的情况下 客户端已连接到服务器并且我们知道 fd 但是 服务器会断开套接字 有什么线索可以检查吗 你要fcntl 检查 fd 上的读 写设置 include
  • 如何从数据集中的存储过程返回表名

    我使用一个数据集来存储加载时需要的 15 个表 当我使用存储过程填充所有表时 它会返回所有表 但表的名称并不与数据库中的实际表名称相同 它获取所有表名为Table1 Table2 Table3 的表 我希望它们的名称与表中实际的名称相同 S
  • 当子元素具有背景颜色并且浏览器缩小小于 100% 时,CSS 边框消失

    我有一个带有 1px 边框的元素和一个具有背景颜色的子元素 当我将浏览器的缩放比例缩小到 70 80 时 会导致父元素的边框消失 我注意到 PC 上的 Chrome 和 IE11 中会出现这种情况 但 MacBook Pro 上的 Chro
  • 比较不同大小的数组而不使用任何循环

    问题是这样的 给定两个数组 a b 均为正整数 A special number是一个数字a i i 该值等于索引 如何检查数组是否b包含一个值 该值是special number of a 例如 a 9 9 3 9 b 3 4 5 输出将
  • 如何使用 R 模拟给定分布中大小为 n 的 m 个随机样本?

    我知道如何从标准统计分布 例如指数分布 生成大小为 n 的随机样本 但是 如果我想生成 m 个大小为 n 的随机样本 即 m 个维度为 n 的向量 我该怎么做呢 创建一个n by m矩阵包含m样本尺寸n您可以使用 x lt replicat
  • java 文件名中的特殊字符

    我正在尝试编写一个文件名中包含特殊字符的文件 例如 t mp3 但文件名始终保留为 相反 字符 我尝试了几种方法 但没有找到解决方案 String musicName new String t mp3 getBytes UTF 8 Outp
  • 在整个行/列上对齐网格项目(就像弹性项目一样)

    使用柔性容器和flex wrap wrap设置您可以使用将溢出的项目对齐到中心justify content center 有没有办法使用 CSS 网格实现溢出网格项的相同行为 我创建了一支显示所需弯曲行为的笔 container flex
  • GWT历史记录中需要什么History.fireCurrentHistoryState()?

    您好 我正在开发 GWT 示例历史管理应用程序 这是我的 onModuleLoad 代码 public void onModuleLoad ContentPanel panel ContentPanel getInstance if His
  • setTimeout函数不停止执行?

    我偶然发现了 setTimeout 的问题 current removeClass class2 setTimeout function current css display none 1000 if current is id id c
  • C 语言的简单凯撒移位

    我正在尝试创建一个简单的凯撒移位用C编写的程序 但我似乎无法弄清楚 程序一直崩溃 任何帮助将不胜感激 include
  • 配置 .NET CLR RAM 使用情况

    有没有办法在我的计算机上配置 NET CLR RAM 使用情况 假设我有 64GB RAM 我想将其限制为 4GB 这可能吗 Edit 问题的根源是我有一个 64 位应用程序 可以在 64 位 4GB 机器上正常运行 但在 64 位 64G
  • 直接在 WP8 中保存到隔离存储

    我想将 zip 文件直接保存到与服务器隔离的存储中 但我面临的问题是 当我尝试使用以下代码保存时 我会出现内存不足异常 因为我的文件大小有时 gt 150 MB 所以我发布了一个问题here建议是 您可以将这样的文件直接下载到Isolate
  • 如何在Swagger(OpenAPI)中定义互斥的查询参数?

    我在 Swagger 中有一系列像这样的参数 parameters name username description Fetch username by username email required false type string