Skip to content

Commit f8bfbfc

Browse files
committed
Clarify data model types and formats
1 parent b016683 commit f8bfbfc

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

versions/3.1.1.md

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,12 @@ Note that no aspect of implicit connection resolution changes how [URIs are reso
199199

200200
### Data Types
201201

202-
Data types in the OAS are based on the types supported by the [JSON Schema Specification Draft 2020-12](https://tools.ietf.org/html/draft-bhutton-json-schema-00#section-4.2.1).
203-
Note that `integer` as a type is also supported and is defined as a JSON number without a fraction or exponent part.
204202
Models are defined using the [Schema Object](#schema-object), which is a superset of JSON Schema Specification Draft 2020-12.
205203

204+
Data types in the OAS are based on the six types supported by the [JSON Schema Specification Draft 2020-12 data model](https://tools.ietf.org/html/draft-bhutton-json-schema-00#section-4.2.1): array, boolean, null, number, object, or string. JSON Schema keywords and `format` values operate on these six types, with certain keywords and formats only applying to a specific type. For example, the `pattern` keyword and the `date-time` format only apply to strings, and treat any instance of the other five types as _automatically valid._ This means JSON Schema keywords (other than `type`) and formats do **NOT** implicitly require the expected type. Use the `type` keyword to constrain the type.
205+
206+
Note that the `type` keyword allows `integer` as a type for convenience, but keyword and format applicability does not recognize integers as being distinct from other numbers because [[JSON]] itself does not make that distinction. JSON Schema defines integers [mathematically](https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-00#section-6.3), meaning that both `1` and `1.0` are considered to be integers for the purpose of the `type` keyword.
207+
206208
<a name="data-type-format"></a>As defined by the [JSON Schema Validation specification](https://tools.ietf.org/html/draft-bhutton-json-schema-validation-00#section-7.3), data types can have an optional modifier property: `format`. As described in that specification, `format` is treated as a non-validating annotation by default; the ability to validate `format` varies across implementations.
207209

208210
The OpenAPI Initiative also hosts a [Format Registry](https://spec.openapis.org/registry/format/) for formats defined by OAS users and other specifications. Support for any registered format is strictly OPTIONAL, and support for one registered format does not imply support for any others.
@@ -211,13 +213,15 @@ Types that are not accompanied by a `format` property follow the type definition
211213

212214
The formats defined by the OAS are:
213215

214-
| [`type`](#data-types) | [`format`](#data-type-format) | Comments |
215-
| -------------------- | --------------------------- | ---------------------------- |
216-
| `integer` | `int32` | signed 32 bits |
217-
| `integer` | `int64` | signed 64 bits (a.k.a long) |
218-
| `number` | `float` | |
219-
| `number` | `double` | |
220-
| `string` | `password` | A hint to obscure the value. |
216+
| [Data Model Type](#data-types) | [`format`](#data-type-format) | Comments |
217+
| ------------------------------ | ----------------------------- | ---------------------------- |
218+
| number | `int32` | signed 32 bits |
219+
| number | `int64` | signed 64 bits (a.k.a long) |
220+
| number | `float` | |
221+
| number | `double` | |
222+
| string | `password` | A hint to obscure the value. |
223+
224+
As noted above, both `type: number` and `type: integer` are considered to be numbers in the data model.
221225

222226
#### Working With Binary Data
223227

0 commit comments

Comments
 (0)