给定以下OpenAPI定义以下哪些对象有效。只有1.或1.和2.?
o.a
Person:
required:
- id
type: object
properties:
id:
type: string
{"id": ""}
{"id": null}
这归结为" required = true"表示"非空值"或" 属性必须存在"。
https://json-schema-validator.herokuapp.com/处的JSON架构验证程序表示2.无效,因为{}
不满足null
约束。请注意,它不会抱怨,因为type: string
为空,但因为id
不是字符串。但是这对于OpenAPI / Swagger有多重要?
答案 0 :(得分:7)
OpenAPI中的required
关键字与JSON Schema中的含义相同:
<强>需要强>
如果对象实例的属性集包含此关键字的数组值中的所有元素,则该对象实例对此关键字有效。
latest JSON Schema spec中的措辞(虽然它不是OpenAPI使用的措辞)更清楚:
如果数组中的每个项目都是实例中属性的名称,则对象实例对此关键字有效。
即,required
表示&#34;属性必须存在&#34;,无论值如何。属性值的type
,format
等是单独的约束,它们与required
分开计算,但作为组合模式一起评估。
在你的例子中:
{"id": ""}
有效:
required
""
验证type: string
{"id": null}
无效:
required
null
不会对type: string
{}
无效:
required
请注意,OpenAPI不支持null
作为类型,但OpenAPI 3.0添加nullable
属性以指示该值可能为null
。因此,{"id": null}
将针对此OpenAPI 3.0架构进行验证:
Person:
required:
- id
type: object
properties:
id:
type: string
nullable: true # <----