问题描述
我尝试定义一个新的自定义资源,要求它具有 (1) 字段 A、(2) 字段 B 或 (3) 空正文之一。
例如:{A: 1},{B: 1},{} 可以,但 {A:1,B:2} 不行。
这是我的自定义资源的 OpenApi 架构形式的定义:
foo:
type: object
properties:
a:
type: int
b:
type: int
oneOf:
- required: ["a"]
- required: ["b"]
# no sure how to include the empty body
我应该如何在 oneOf 约束中包含空体?
解决方法
OpenAPI 3.1
您可以使用 'null'
(带引号)。
oneOf:
- type: 'null'
或具有 null 类型属性的对象。
oneOf:
- NullObjectExample:
type: object
properties:
prop1:
type: 'null'
OpenAPI 3.0
没有 null
类型,但您可以使用 nullable
字符串。您可能需要添加一个 description
声明它应该始终为空。
oneOf:
- type: string
nullable: true
或者,一个具有可为空字符串属性的对象。
oneOf:
- NullObjectExample:
type: object
properties:
prop1:
type: string
nullable: true
为什么没有空对象
除了没有明确意图之外,这还可能存在安全漏洞。有关说明,请参阅 this page。简而言之:
如果您没有明确定义架构并且将 JSON 负载的属性留空,那么您实际上允许攻击者传入任何数据。这意味着您正在向各种攻击开放您的后端,例如 SQL 注入。