什么需要'在OpenAPI中真的是这个意思

时间:2017-08-08 18:24:06

标签: swagger openapi

给定以下OpenAPI定义以下哪些对象有效。只有1.或1.和2.?

o.a
  1. Person: required: - id type: object properties: id: type: string
  2. {"id": ""}
  3. {"id": null}
  4. 这归结为" required = true"表示"非空"或" 属性必须存在"。

    https://json-schema-validator.herokuapp.com/处的JSON架构验证程序表示2.无效,因为{}不满足null约束。请注意,它不会抱怨,因为type: string为空,但因为id不是字符串。但是这对于OpenAPI / Swagger有多重要?

1 个答案:

答案 0 :(得分:7)

OpenAPI中的required关键字与JSON Schema中的含义相同:

  

<强>需要

     

如果对象实例的属性集包含此关键字的数组值中的所有元素,则该对象实例对此关键字有效。

latest JSON Schema spec中的措辞(虽然它不是OpenAPI使用的措辞)更清楚:

  

如果数组中的每个项目都是实例中属性的名称,则对象实例对此关键字有效。

即,required表示&#34;属性必须存在&#34;,无论值如何。属性值的typeformat等是单独的约束,它们与required分开计算,但作为组合模式一起评估。

在你的例子中:

  1. {"id": ""}有效:

    • ✓验证required
    • ✓值""验证type: string
  2. {"id": null}无效:

    • ✓验证required
    • null不会对type: string
    • 进行验证
  3. {}无效:

    • ✗不会对required
    • 进行验证
  4. 请注意,OpenAPI不支持null作为类型,但OpenAPI 3.0添加nullable属性以指示该值可能为null。因此,{"id": null}将针对此OpenAPI 3.0架构进行验证:

    Person:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          nullable: true   # <----