首页 > 解决方案 > 如何为此字段编写多种类型的 OpenAPI (Swagger) 定义?

问题描述

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

参数:{ [名称:字符串]: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

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

不应包含其他属性名称。

标签: angularswaggerswagger-2.0openapi

解决方案


params是一个对象,包含名为name的字段,默认情况下它是字符串类型,它可以是任何类型,如下所述:。整数、数字、布尔字符串或字符串数​​组、布尔值、数字、整数。它可以是任何东西。

可以是任何东西”是通过根本不指定 来定义的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

推荐阅读