Swagger API 文档 XOR

Gif*_*per 4 api yaml xor swagger-ui swagger-2.0

我想知道是否可以在 swagger.yaml/json 中使用 XOR 如果我有类似的内容,例如:

PostableEntity:
  properties:
    first_property:
      type: string
    second_property:
      type: string
      minLength: 1
      description: foo
    third_property:
      type: number
  required:
    - third_property
Run Code Online (Sandbox Code Playgroud)

现在,如果未设置 secondary_property ,我怎样才能使 first_property 成为必需的,反之亦然?

mik*_*ika 5

条件属性无法建模,但您可以使用多态性寻求解决方法。您可以使用 和 两个子模型 ( 和 ) 创建一个父模型P,third_property一个C1( C2)C1与first_property另一个 ( C2) 与second_property。使用allOf关键字和字段,您将获得具有属性 form或 的discriminator模型。P+C1P+C2

请参阅文档中的“组合和继承(多态性)”一章。

Swagger 允许使用 JSON Schema 的 allOf 属性组合和扩展模型定义,实际上提供了模型组合。allOf 接受一组对象定义,这些对象定义独立验证,但共同组成一个对象。

暗示:

当您的 swagger 编辑器使用关键字报告您以下错误时,请不要感到困惑allOf:不允许使用其他属性,但设置了属性 <foo>

目前 github 上已经报告了一个错误,请参阅此链接。