当前位置: 首页 > 知识库问答 >
问题:

如何在OpenAPI中要求至少两个参数中的一个?

终波涛
2023-03-14

我使用的是OpenAPI3,有两个查询参数,其中至少有一个是必需的,但哪个并不重要。

if parameter_1 OR parameter_2:
    do stuff
else:
    error

这在OpenAPI3中可能吗?就我所见,规范和JSON模式规范中都没有提到它。

共有1个答案

吕扬
2023-03-14

此场景非常类似于互斥参数。基本上,您可以使用对象类型参数,其中parameter_1parameter_2是对象属性;这样的对象将序列化为?parameter_1=value1&parameter_2=value2。可以使用minpropertiesanyof表示“至少一个of”约束。

openapi: 3.0.2
...
paths:
  /foo:
    get:
      parameters:
        - in: query
          name: param
          required: true
          schema:
            type: object
            properties:
              parameter_1:
                type: string
              parameter_2:
                type: string
            additionalProperties: false

            # Option 1
            minProperties: 1

            # Option 2
            # anyOf:
            #  - required: [parameter_1]
            #  - required: [parameter_2]

还有一个现有的特性请求支持parameters列表中各个参数之间的相互依赖关系:
https://github.com/oai/openapi-specification/issues/256

 类似资料:
  • 我有这个OpenAPI模式: 所有属性都是必需的。这是用于<code>PUT/user/profile<code>的。 我会把它改成 。用户发送的参数只是他们只请求更改。系统验证至少需要一个参数。 我如何描述[用户名,电子邮件,描述,个人资料_图标]之一是必需的? 可接受的示例请求: 不可接受的示例(错误): 注释器很接近,但它似乎仅适用于模式,而不是属性。 https://swagger.io/

  • 问题内容: 在此代码构造中: 是否可以要求至少包含一个这样的条目,以便在编译时检查?(当然,在运行时,我只能检查numbers.length。) 显然,我可以这样做: 但这不会很优雅。 我这样做的原因是要确保子类不会根本不忘记调用此构造函数,默认情况下,该构造函数将调用列表中没有数字的。在这种情况下,我想获得熟悉的错误消息:。 是否可以有另一种方法来实现相同的目标,例如将此构造函数标记为非隐式的@

  • 我有多个复选框的列表。用户可以检查所有表单,但至少应检查其中一个以允许表单提交。我如何执行该要求?

  • 我有一个资源: 我想定义一个补丁,这样客户端就可以更新image、bio或两者。 有效的请求主体示例如下: 如果属性单独发送,则现有的属性将在服务器上保持不变,并且只会更新图像。如果两者都发送(如上所述),两者都将更改。 简而言之: > 不允许使用空的请求正文。 ,or是允许的。 这就是我目前所拥有的。我正在使用带有两个独立类型的anyOf对象:object。我曾使用virtserver在Swag

  • 问题内容: 每次运行此php时,我都会不断收到相同的3个错误。我不知道我在做什么错,有人可以帮忙吗? 错误如下: [2014年5月5日19:20:50美国/芝加哥] PHP警告:mysqli_query()至少需要2个参数,第10行的/home/sagginev/public_html/Nutrifitness/search.php中提供了1个参数 [2014年5月5日19:20:50美国/芝加哥

  • 我试图使用Angularjs验证来在列表中至少有一个输入被填写时启用按钮。我所做的工作类似于下面的w3schools示例: 用角验证做这件事的最好方法是什么?