如何在 OpenAPI (Swagger) 中定义可以为字符串或空值的 属性?

How to define a property that can be string or null in OpenAPI (Swagger)?

我有 JSON 模式文件,其中一个属性被定义为 stringnull:

"type":["string", "null"]

当转换为 YAML(与 OpenAPI/Swagger 一起使用)时,它变成:

type:
  - 'null'
  - string

但 Swagger 编辑器显示错误:

Schema "type" key must be a string

在 OpenAPI 中定义可空 属性 的正确方法是什么?

这取决于 OpenAPI 版本。

OpenAPI 3.1

您的示例在 OpenAPI 3.1 中有效,它与 JSON Schema 2020-12 完全兼容。

type:
  - 'null'   # Note the quotes around 'null'
  - string

# same as
type: ['null', string]

以上相当于:

oneOf:
  - type: 'null'   # Note the quotes around 'null'
  - type: string

OAS 3 中使用的 nullable 关键字。0.x(见下文)在 OAS 3.1 中不存在,它被删除以支持 'null' 类型。

OpenAPI 3.0.x

可空字符串定义如下:

type: string
nullable: true

这与 JSON 模式语法不同,因为 OpenAPI 版本高达 3。0.x 使用他们自己的 flavor of JSON Schema ("extended subset"). One of the differences is that the type must be a single type and cannot be a list of types. Also there's no 'null' type; instead, the nullable 关键字作为 type 修饰符来允许 null 值。

OpenAPI 2.0

OAS2 不支持 'null' 作为数据类型,所以你运气不好。您只能使用 type: string。但是,一些工具支持 x-nullable: true 作为供应商扩展,即使空值不是 OpenAPI 2.0 规范的一部分。

考虑迁移到 OpenAPI v.3 以获得对空值的适当支持。