通过Swagger/OpenAPI指定additionalProperties的多个类型

14

我希望在OpenAPI中表示以下JSON对象:

{
  "name": "Bob",
  "age": 4,
  ...
}
属性数量和属性名称并非完全预定,因此我希望使用additionalProperties。但是,我不太确定如何在OpenAPI/Swagger 2.0中表示它。我尝试了下面的方法:

属性数量和属性名称并非完全预定,因此我希望使用additionalProperties。但是,我不太确定如何在OpenAPI/Swagger 2.0中表示它。我尝试了下面的方法:

Person:
  type: object
  additionalProperties:
    type:
      - int
      - string

或其JSON等效形式:

{
  "Person": {
    "type": "object",
    "additionalProperties": {
      "type": ["int", "string"]
    }
  }
}

但这并没有完全奏效。有没有办法保留我想要表示的JSON对象的结构,特别是对于字符串和整数,而不是任意对象类型?


@Helen 这并不是完全随意的;我知道它将是一个字符串或整数,但不是布尔值、空值或其他对象。 - sle
1个回答

29

OpenAPI 3.1

在OpenAPI 3.1中,type关键字可以使用类型列表:

Person:
  type: object
  additionalProperties:
    type: [string, integer]

OpenAPI 3.x

OpenAPI 3.0+支持oneOf,因此您可以使用:

Person:
  type: object
  additionalProperties:
    oneOf:
      - type: string
      - type: integer

OpenAPI 2.0

OpenAPI 2.0不支持多类型值。你能做的最好方法是使用无类型模式,也就是额外属性可以是任何东西-字符串、数字、布尔值等等-但你无法指定确切的类型。

Person:
  type: object
  additionalProperties: {}

这相当于:

Person:
  type: object

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接