Swagger API 文档 XOR

Swagger API Docs XOR

我想知道是否可以大摇大摆地使用 XOR。yaml/json 例如,如果我有这样的东西:

PostableEntity:
  properties:
    first_property:
      type: string
    second_property:
      type: string
      minLength: 1
      description: foo
    third_property:
      type: number
  required:
    - third_property

现在,如果 second_property 未设置,我怎样才能使 first_property 成为必需项?

无法对条件属性建模,但您可以使用多态性寻求解决方法。您可以创建一个父模型 Pthird_property 以及两个子模型(C1C2),一个 (C1) 和 first_property另一个 (C2) 和 second_property。使用 allOf 关键字和 discriminator 字段,您将获得属性形式为 P+C1P+C2.

的模型

请参阅 documentation 中的 组合和继承(多态) 一章。

Swagger allows combining and extending model definitions using the allOf property of JSON Schema, in effect offering model composition. allOf takes in an array of object definitions that are validated independently but together compose a single object.

提示:

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

目前有一个错误已在 github 上报告,请参阅 this link

在 OpenAPI 3.1 中,这似乎现在工作得更好:https://community.smartbear.com/t5/Swagger-Open-Source-Tools/Defining-conditional-attributes-in-OpenAPI/m-p/222693#M2058