Swagger 什么是';必需的';在OpenAPI中真正的意思是

Swagger 什么是';必需的';在OpenAPI中真正的意思是,swagger,openapi,Swagger,Openapi,给定以下OpenAPI定义,以下哪些对象是有效的。只有一个。或1。和2 Person: required: - id type: object properties: id: type: string {“id”:“} {“id”:null} {} 这归结为“required=true”是指“非空值”还是“属性必须存在”的问题 位于的JSON模式验证器表示2。无效,因为null不满足type:string约束。请注意,它不会抱怨,因为id为null,而是

给定以下OpenAPI定义,以下哪些对象是有效的。只有一个。或1。和2

Person:
  required:
    - id
  type: object
  properties:
    id:
      type: string
  • {“id”:“}
  • {“id”:null}
  • {}
  • 这归结为“required=true”是指“非空值”还是“属性必须存在”的问题


    位于的JSON模式验证器表示2。无效,因为
    null
    不满足
    type:string
    约束。请注意,它不会抱怨,因为
    id
    为null,而是因为
    null
    不是字符串。但这与OpenAPI/Swagger有多大关系?

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

    必需的

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

    中的措词(尽管它不是OpenAPI使用的措词)更清楚:

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

    也就是说,
    required
    表示“属性必须存在”,而不管值是多少。属性值的
    类型
    格式
    等是单独的约束,与
    所需
    分别计算,但作为组合模式一起计算

    在您的示例中:

  • {“id”:“}
    有效:

    • ✓ 根据
      要求进行验证
    • ✓ 值
      根据
      类型:字符串进行验证
  • {“id”:null}
    无效:

    • ✓ 根据
      要求进行验证
    • null
      不针对
      type:string
  • {}
    无效:

    • ✗ 不根据
      要求进行验证
  • 请注意,
    null
    作为一种类型在OpenAPI中不受支持,但OpenAPI 3.0添加了该属性以指示该值可能是
    null
    。因此,
    {“id”:null}
    将根据此OpenAPI 3.0模式进行验证:

    人:
    必修的:
    -身份证
    类型:对象
    特性:
    身份证件:
    类型:字符串
    
    nullable:true#回答得很好,谢谢。JSON模式规范与JavaScript/JSON的
    null
    @MarcelStör JSON模式的
    null
    类型没有很好的一致性不是你的错,可空模式可以定义为
    {“type”:[“string”,“null”]}
    。但是OpenAPI不支持
    type:null
    ,而是使用
    nullable
    属性。