Compatibility and support¶
This page summarizes which specification versions are supported by Jane components.
At a glance¶
- OpenAPI generation supports 2.0, 3.0.x and 3.1.x.
- JSON Schema generation supports draft 2019-09 and 2020-12.
- Validation support follows JSON Schema validation draft 2020-12.
Support matrix¶
| Area | Supported versions | Notes |
|---|---|---|
| OpenAPI client generation | 2.0, 3.0.x, 3.1.x | See detailed mapping below to pick the right component |
| JSON Schema model generation | 2019-09, 2020-12 | Applies to generated models and normalizers |
| JSON Schema validation | 2020-12 | See Validation guide for currently unsupported keywords |
| Nullability behavior | OpenAPI 2, 3.0.x, 3.1.x and JSON Schema | See Nullability guide for syntax per spec |
OpenAPI component selection¶
Use this mapping when choosing which OpenAPI package/component to install.
| OpenAPI version in your schema | Composer package to install | Internal component family |
|---|---|---|
| 2.0 | jane-php/open-api-2 + jane-php/open-api-runtime |
OpenApi2 |
| 3.0.x | jane-php/open-api-3 + jane-php/open-api-runtime |
OpenApi3 |
| 3.1.x | jane-php/open-api-3-1 + jane-php/open-api-runtime |
OpenApi31 |
Tip
If you handle mixed OpenAPI versions across projects, you can keep both jane-php/open-api-2 and jane-php/open-api-3 as dev dependencies. Jane will select the matching parser/component from the schema version.
Unsupported syntax across versions¶
Jane validates your document against the features supported by the selected component before generating anything. When it finds something unsupported, generation stops with an error listing every violation and its location in your document (as a JSON pointer), along with how to fix it.
The most common case is using OpenAPI 3.1 type arrays in a 3.0.x document:
# Valid in OpenAPI 3.1.x, rejected by jane-php/open-api-3:
type:
- string
- 'null'
Unsupported feature(s) found in your schema:
`type` must be a string in OpenAPI 3.0.x, array given ("string", "null") at "/components/schemas/Pet/properties/status/type". Type arrays are an OpenAPI 3.1 feature: generate your client with jane-php/open-api-3-1 instead, or rewrite this schema using `nullable: true` / `oneOf`.
Depending on your situation, either generate with the matching package
(jane-php/open-api-3-1) or rewrite the schema with the 3.0.x equivalents
(nullable: true, or a oneOf with a 'null' entry). See the
Nullability guide for the correct syntax per spec version.
Unsupported type for non-body parameters¶
Query, header, path and cookie parameters map their schema.type to a PHP
type. In a 3.0.x document only string, number, boolean, integer,
array, object and file are accepted: anything else — or a parameter
schema with neither type nor enum — stops generation with the offending
location instead of crashing midway:
# Rejected by jane-php/open-api-3:
paths:
/pets:
get:
parameters:
- name: since
in: query
schema:
type: 'null'
Unsupported feature(s) found in your schema:
`type` "null" is not supported for non-body parameters, expected one of "string", "number", "boolean", "integer", "array", "object" or "file" at "/paths/~1pets/get/parameters/0/schema/type".
Object-typed parameters (e.g. deepObject style) and schemas relying on an
enum alone remain fully supported.
Malformed securitySchemes entries¶
securitySchemes (in OpenAPI 3.x) and securityDefinitions (in OpenAPI 2.0)
are maps of name => scheme definition. Feeding them a bare scheme definition —
for instance pasting the scheme object directly under securitySchemes:
# Rejected by all jane-php/open-api-* components:
components:
securitySchemes:
type: http
scheme: basic
used to be silently ignored: generation succeeded but produced no authentication classes. Such entries now stop generation with the offending location and the expected shape:
Unsupported feature(s) found in your schema:
Security scheme entry is not a valid Security Scheme Object (string given) at "/components/securitySchemes/type". `securitySchemes` must be a map of name => scheme definition, e.g. {"myAuth": {"type": "http", "scheme": "basic"}}.
Entries referencing an unknown scheme type, or missing the fields required by
their type (name / in for apiKey, scheme for http in OpenAPI 3.0.x,
flows for oauth2, ...), are rejected the same way. Scheme types that are
valid but produce no authentication classes with Jane (oauth2,
openIdConnect, ...) remain accepted.