通过Swagger / OpenAPI为AdditionalProperty指定多种类型

sle*_*sle 4 json yaml swagger openapi

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

{
  "name": "Bob",
  "age": 4,
  ...
}
Run Code Online (Sandbox Code Playgroud)

属性的数量和属性名称尚未完全确定,因此我希望使用AdditionalProperties。但是,我不太确定如何通过OpenAPI / Swagger 2.0表示它。我尝试了这个:

Person:
  type: object
  additionalProperties:
    type:
      - int
      - string
Run Code Online (Sandbox Code Playgroud)

或等效的JSON:

{
  "Person": {
    "type": "object",
    "additionalProperties": {
      "type": ["int", "string"]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但这不太奏效。有什么方法可以保留我要表示的JSON对象的结构,特别是字符串和整数,而不是任意对象类型?

Hel*_*len 8

OpenAPI / Swagger 2.0不支持多类型值。您最多可以使用无类型架构,这意味着附加属性可以是任何内容-字符串,数字,布尔值等-但您不能指定确切的类型。

Person:
  type: object
  additionalProperties: {}
Run Code Online (Sandbox Code Playgroud)

这等效于:

Person:
  type: object
Run Code Online (Sandbox Code Playgroud)


您可能需要切换到支持的OpenAPI 3.0,oneOf因此可以使用:

Person:
  type: object
  additionalProperties:
    oneOf:
      - type: string
      - type: integer
Run Code Online (Sandbox Code Playgroud)