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

如何在OpenAPI 3.0中要求一个对象至少有一个属性?

莫逸仙
2023-03-14

我有这个OpenAPI模式:

components:
  schemas:
    User:
      type: object
      required:
        - username
        - email
        - description
        - profile_icon
      properties:
        username
          type: string
        email
          type: string
          format: email
        description
          type: string
        profile_icon
          type: string

所有属性都是必需的。这是用于<code>PUT/user/profile<code>的。

我会把它改成 PATCH /user/profile。用户发送的参数只是他们只请求更改。系统验证至少需要一个参数。

我如何描述[用户名,电子邮件,描述,个人资料_图标]之一是必需的?

可接受的示例请求:

{
  "username": "Will Smith"
}
{
  "email": "test@example.com",
  "profile_icon": "aaaaa.png"
}

不可接受的示例(错误):

{}

anyOf注释器很接近,但它似乎仅适用于$ref模式,而不是属性。

https://swagger.io/docs/specification/data-models/oneof-anyof-allof-not/

共有1个答案

爱花蜂
2023-03-14

要求对象中至少有1个属性的最简单方法是使用< code>minProperties: 1。

    User:
      type: object
      minProperties: 1   # <--------
      properties:
        username:
          type: string
        ...
 类似资料:
  • 我使用的是OpenAPI3,有两个查询参数,其中至少有一个是必需的,但哪个并不重要。 这在OpenAPI3中可能吗?就我所见,规范和JSON模式规范中都没有提到它。

  • 快速问题 - 假设我有一个这样的组件: 如果我们不传递 nameA,有没有办法在 Typescript 中强制使用 nameB? 写起来

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

  • 我想知道我是否可以定义一个JSON模式(草案4),它至少需要对象的许多属性中的一个。我已经知道、和之一,但就是不知道如何以我想要的方式使用它们。 下面是一些JSON示例来说明:

  • 在我的< code>swagger.yaml中有一个这样的模式对象定义: 但是,生成的服务器仍然乐意接受使用此模式对象作为不包含任何字段的必需主体参数的POST请求。 我是否可以这样配置Swagger:<code>颜色</code>字段在<code>用户

  • 问题内容: 在Python中,是否有一个库方法可在同一类的两个(已经存在)实例之间复制所有属性? 我的意思是,类似Apache Commons的东西 问题答案: 如果您的班级未修改或出于特殊属性访问目的,则所有属性都存储在其中,因此您可以执行以下操作: 如果使用python属性,则应查看并筛选出要复制的属性。