如何为此字段编写具有多种类型的OpenAPI(Swagger)定义?

时间:2019-05-17 12:13:05

标签: angular swagger swagger-2.0 openapi

我正在为params字段编写一个OpenAPI定义,该字段是一个对象,包含一个名为name的字段,默认情况下该字段为字符串类型,但可以为任何类型,例如整数,数字,布尔值,字符串或字符串,布尔值,数字,整数的数组。

参数:{     [名称:字符串]:int |字符串编号布尔| int [] |字符串[] |数字[] |布尔值[]   }

如何在OpenAPI中定义这样的字段?

我尝试了以下

  params:
    description: Simple parameters map
    type: object
    additionalProperties:
      name:
        type: object
        oneOf:
          - type: string
          - type: boolean
          - type: integer
          - type: number
          - type: array
            items:
              - string
              - integer
              - number
              - boolean

但这会产生以下语法错误:

  

不应包含其他属性名称。

1 个答案:

答案 0 :(得分:0)

  

params 是一个对象,包括名为 name 的字段,默认情况下该字段为字符串类型,并且可以是以下所述的任何类型:整数,数字,布尔字符串或字符串,布尔,数字,整数数组。 可以是任何东西。

Can be anything”是通过完全不指定type来定义的。但是在这种情况下,可能的“任何”值包括对象和对象数组,而您没有提到。

params:
  description: Simple parameters map
  type: object
  properties:
    name: {}

    # OR if you want to add a description, use
    # name:
    #   description: Can be anything


但是,如果“任何”仅表示您列出的特定类型,则需要anyOf。请注意,anyOf在OpenAPI 3.0(openapi: 3.0.0)中受支持,在OpenAPI / Swagger 2.0(swagger: "2.0")中不受支持。

# openapi: 3.0.0

params:
  type: object
  properties:
    name:
      anyOf:
        - type: string
        - type: integer
        - type: number
        - type: boolean
        - type: array
          items:
            type: string
        - type: array
          items:
            type: integer
        - type: array
          items:
            type: number
        - type: array
          items:
            type: boolean