Schema object without a type attribute in Swagger 2.0

爱⌒轻易说出口 提交于 2019-11-28 02:14:59

Like in JSON Schema, OpenAPI schema objects do not require a type, and you are correct in that no type means any type.

"Type-specific" keywords such as properties, items, minLength, etc. do not enforce a type on the schema. It works the other way around – when an instance is validated against a schema, these keywords only apply when the instance is of the corresponding type, otherwise they are ignored. Here's the relevant part of the JSON Schema Validation spec:

4.1. Keywords and instance primitive types

Some validation keywords only apply to one or more primitive types. When the primitive type of the instance cannot be validated by a given keyword, validation for this keyword and instance SHOULD succeed.

For example, consider this schema:

definitions:
  Something:
    properties:
      id:
        type: integer
    required: [id]
    minLength: 8

It's a valid schema, even though it combines object-specific keywords properties and required and string-specific keyword minLength. This schema means:

  • If the instance is an object, it must have an integer property named id. For example, {"id": 4} and {"id": -1, "foo": "bar"} are valid, but {} and {"id": "ACB123"} are not.

  • If the instance is a string, it must contain at least 8 characters. "Hello, world!" is valid, but "" and abc are not.

  • Any instances of other types are valid - true, false, -1.234, [], [1, 2, 3], [1, "foo", true], etc.
    (Except null - OpenAPI 2.0 does not have the null type and does not support null except in extension properties. OpenAPI 3.0 supports the null value for schemas with nullable: true.)

If there are tools that infer the type from other keywords (for example, handle schemas with no type but with properties as always objects), then these tools are not exactly following the OpenAPI Specification and JSON Schema.


Bottom line: If a schema must always be an object, add type: object explicitly. Otherwise you might get unexpected results.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!