OpenAPI 可选对象默认值
OpenAPI optional object default value
假设您有以下 OpenAPI requestBody 规范:
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
field1:
type: number
default: 1
field2:
type: object
properties:
subfield:
type: number
default: 2
请求正文包含:
- 默认值为 1
的 number
字段
- 一个
object
字段,包含一个 number
字段,默认值为 2
如果客户端发送空负载,我们应该同意 field1
值应该是 1
,但是 field2
值呢?
field2
没有指定,所以必须认为是null
field2
应该是具有默认值的对象构建:{subfield: 2}
- OpenAPI 不回答这个问题,这由我决定我的应用程序应该做什么
正确的行为将是您的替代选择1
,但要有所不同。
field2
应被视为“不存在”而不是 null
,因为这些情况之间存在一些差异,请参阅 https://github.com/OAI/OpenAPI-Specification/issues/1775 了解与该差异相关的一些讨论。
从验证的角度来看,field2
未声明为 nullable
,像 {"field2": null}
这样的对象不应该是有效的,但 {}
是。
“不存在”或 null
是否应该以不同方式处理取决于您的申请。
假设您有以下 OpenAPI requestBody 规范:
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
field1:
type: number
default: 1
field2:
type: object
properties:
subfield:
type: number
default: 2
请求正文包含:
- 默认值为 1 的
- 一个
object
字段,包含一个number
字段,默认值为 2
number
字段
如果客户端发送空负载,我们应该同意 field1
值应该是 1
,但是 field2
值呢?
field2
没有指定,所以必须认为是nullfield2
应该是具有默认值的对象构建:{subfield: 2}
- OpenAPI 不回答这个问题,这由我决定我的应用程序应该做什么
正确的行为将是您的替代选择1
,但要有所不同。
field2
应被视为“不存在”而不是 null
,因为这些情况之间存在一些差异,请参阅 https://github.com/OAI/OpenAPI-Specification/issues/1775 了解与该差异相关的一些讨论。
从验证的角度来看,field2
未声明为 nullable
,像 {"field2": null}
这样的对象不应该是有效的,但 {}
是。
“不存在”或 null
是否应该以不同方式处理取决于您的申请。