【问题标题】:How to write an OpenAPI (Swagger) definition for this field with multiple types?如何为此字段编写具有多种类型的 OpenAPI (Swagger) 定义?
【发布时间】:2019-10-04 18:32:42
【问题描述】:

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

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

如何在 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

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

不应包含其他属性名称。

【问题讨论】:

  • 字段名称和类型到底是什么?该字段在哪里使用 - 在查询字符串、请求正文等中?越详细,我们就越容易为您提供帮助。
  • 谢谢海伦,实际上我已经在问题中提到了字段名称,即 params 这是一个对象,包括名为 name 的字段,它是字符串默认类型,它可以是任何类型,如下所述:。整数、数字、布尔字符串或字符串数​​组、布尔值、数字、整数。它可以是任何东西。该字段特别用于定义一个实体,该实体作为请求正文进一步发送。

标签: angular swagger swagger-2.0 openapi


【解决方案1】:

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。请注意,OpenAPI 3.0 (openapi: 3.0.0) 支持 anyOf,而 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

【讨论】:

  • 感谢您的帮助,海伦。实际上,Helen,我的招摇支持 OpenAPI/Swagger 2.0。而且它不支持 anyOf 所以我应该在 OpenAPI/Swagger 2.0 中写什么来代替 anyOf。 bdw 感谢您的回答,这对我真的很有帮助,如果您告诉我 swagger2.0 支持什么,那就太好了。上面提到的任何事情,你都说对了,就是我提到的那个。
  • 在 OpenAPI 2.0 中,您最多可以将属性定义为无类型 (name: {}),如我回答的第一部分所示。
猜你喜欢
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
相关资源
最近更新 更多