json-validator.de

Ratgeber · JSON Schema 2020-12

OpenAPI und JSON Schema: wie sie zusammenhängen

OpenAPI 3.0 hatte einen JSON-Schema-Subset. OpenAPI 3.1 ist Draft-2020-12-kompatibel. Migration und Tooling-Status im Überblick.

Foto von Jan-Tristan Rudat

Von Jan-Tristan Rudat

Redakteur json-validator.de

Die kurze Antwort

Seit OpenAPI 3.1 (Februar 2021) ist die Schema-Sprache in OpenAPI identisch mit JSON Schema Draft 2020-12. Vorher: OpenAPI 3.0 hatte ein eigenes Subset, mit einigen Inkompatibilitäten.

Die längere Geschichte

OpenAPI-VersionJSON-Schema-Relation
Swagger 2.0Eigenes Subset von Draft 04
OpenAPI 3.0Modifiziertes Subset, mit eigenen Erweiterungen (nullable, discriminator)
OpenAPI 3.1100 % kompatibel mit Draft 2020-12 + eigene Erweiterungen (discriminator)

Was sich konkret von 3.0 → 3.1 geändert hat

1. nullable wurde abgeschafft

# OpenAPI 3.0
type: string
nullable: true

# OpenAPI 3.1
type: [string, null]

3.1 nutzt JSON-Schema-Stil. nullable wird in 3.1 zwar als Alias akzeptiert von manchen Tools, ist aber deprecated.

2. exclusiveMinimum / exclusiveMaximum als Number

# OpenAPI 3.0
minimum: 0
exclusiveMinimum: true

# OpenAPI 3.1 (= JSON Schema)
exclusiveMinimum: 0

3. type ist optional

In 3.0 musste jedes Schema ein type haben. In 3.1 (folgt JSON Schema) ist type optional - ein Schema ohne type passt zu allen Typen, die anderen Constraints (z.B. enum, const) bestimmen die Validation.

4. Items-Array für Tupel

In 3.1: prefixItems für Tupel-Validation. In 3.0 ging das nicht.

discriminator: die OpenAPI-Erweiterung

Auch in 3.1: das discriminator-Keyword ist OpenAPI-spezifisch und nicht Teil von JSON Schema. Es hilft Validators bei oneOf-Performance:

oneOf:
  - $ref: '#/components/schemas/Cat'
  - $ref: '#/components/schemas/Dog'
discriminator:
  propertyName: petType
  mapping:
    cat: '#/components/schemas/Cat'
    dog: '#/components/schemas/Dog'

Migration 3.0 → 3.1 Praxis

Tools die helfen:

  • openapi-3.1-migrator (npm): konvertiert nullable, exclusiveMinimum etc.
  • Redocly CLI: hat einen migrate-Befehl
  • Manuell: für kleine Specs reicht Search & Replace

Tooling-Status 2026

ToolOpenAPI 3.1 Support
openapi-typescriptVoll (seit 6.x)
RedoclyVoll
Swagger UIVoll (seit 5.x)
PostmanVoll
OpenAPI Generator (Code-Gen)Teilweise - Sprachen-abhängig
AWS API GatewayEingeschränkt - eigene Erweiterungen

Was bedeutet das für deine Schemas?

Wenn du eine OpenAPI-3.1-Spec hast, sind alle components.schemas-Einträge gültige JSON-Schema-Draft-2020-12-Dokumente. Du kannst sie direkt mit Ajv validieren - kein Conversion-Step nötig.

Wenn du noch auf 3.0 bist und Schemas extern nutzen willst: erst auf 3.1 migrieren, dann extrahieren. Manuelle Conversions sind fehleranfällig (besonders bei nullable).

Reine JSON-Schema-Use-Cases

Nicht jedes Schema-Use-Case braucht OpenAPI. Reines JSON Schema reicht für:

  • Konfigurations-Dateien-Validation (.eslintrc, package.json)
  • Interne Datenstrukturen ohne HTTP-Kontext
  • Message-Bus-Payloads (RabbitMQ, Kafka)
  • IDE-Autocomplete (VSCode liest .json/.schema)

OpenAPI wird relevant sobald HTTP-Pfade, Status-Codes, Auth-Mechanismen mitdokumentiert werden müssen.

Mehr zum Thema