0

我尝试定义一个新的自定义资源,要求它具有 (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 约束中包含空主体?

4

1 回答 1

1

开放API 3.1

您可以使用'null'(带引号)。

oneOf:
  - type: 'null'

或具有 null 类型属性的对象。

oneOf:
  - NullObjectExample:
    type: object
    properties:
      prop1:
        type: 'null'

开放API 3.0

没有null类型,但您可以使用nullable字符串。您可能需要添加一条description说明 this 预计始终为 null。

oneOf:
  - type: string
    nullable: true

或者,具有可为空字符串属性的对象。

oneOf:
  - NullObjectExample:
    type: object
    properties:
      prop1:
        type: string
        nullable: true

为什么没有空对象

除了没有明确意图之外,这还存在一个可能的安全漏洞。有关说明,请参阅此页面。简而言之:

如果您没有明确定义架构并且将 JSON 有效负载的属性留空,那么您实际上允许攻击者传入任何数据。这意味着您正在向各种攻击开放后端,例如 SQL 注入。

于 2021-02-24T17:54:29.890 回答