【问题标题】:Mutually excluding properties in swagger大摇大摆地相互排斥属性
【发布时间】:2019-04-10 14:54:35
【问题描述】:

我如何表明在 my_object 中您可以拥有 property_1 或 property_2,但不能同时拥有?

my_object:
  type: object
  properties:
    property_1:
      type: string
    property_2:
      type: string

【问题讨论】:

标签: swagger openapi


【解决方案1】:

您可能想切换到 OpenAPI 3.0,它支持 oneOf 关键字来定义互斥条件:

这是一个例子:

 my_object:
 type: object
 properties:
   property_1:
     type: string
   property_2:
    type: integer
 oneOf:
- required: [property_1]
- required: [property_2]

【讨论】:

  • 这个答案不正确。混合类型!= 互斥属性。
  • @Helen,感谢您的评论,我编辑了我的回复。
【解决方案2】:

OpenAPI 3.0 (openapi: 3.0.0) 中,您可以使用oneOf 关键字来定义互斥条件。此架构要求存在 property_1property_2,但不能同时存在:

my_object:
  type: object
  properties:
    property_1:
      type: string
    property_2:
      type: string
    property_3:
      type: string
  oneOf:
    - required: [property_1]
    - required: [property_2]

如果这两个属性中至少有一个必须存在,请改用anyOf

注意:虽然 oneOf 是 OpenAPI 规范的一部分(如,您可以编写包含 oneOf 的 API 定义),但对 oneOf 的实际工具支持可能会有所不同并受到限制.


如果您使用 OpenAPI 2.0 (swagger: "2.0"),它不支持 oneOf,因此您只能在架构描述或属性描述中口头记录这种情况。

【讨论】:

  • 这至少在 SwaggerHub 中不起作用:角色:类型:对象属性:特定:类型:数组项:$ref:'#/components/schemas/Role' fromProto:类型:布尔默认值: true oneOf:- 必需:[特定] - 必需:[fromProto] [![文档结果:][1]][1] [1]:i.stack.imgur.com/XGXyp.png
  • @cvigo 在这里打开一个问题:github.com/swagger-api/swagger-ui/issues
猜你喜欢
  • 1970-01-01
  • 2020-03-18
  • 2019-05-11
  • 1970-01-01
  • 2022-09-28
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多