Leistungen Referenzen Notfallservice Kontakt
    KONTAKT.

    Konsolutions | Full-Service-Agentur
    Volker Königshofen
    Mühlenbachstr. 40
    41462 Neuss

    Fon: +49 172 2485226 (auch Whatsapp)
    Fax: +49 2131 5394167
    Mail: info@koenigshofen.com/blog

    USt-IdNr.: DE255840543

    Kontaktformular
    Unser Team

    Haendlerbund

    In vielen Projekten beginnt es harmlos: Eine API liefert JSON zurück, ein Frontend schickt JSON an den Server, und alle sind sich „ungefähr“ einig, wie die Daten aussehen. Spätestens wenn mehrere Clients, Versionen oder Teams beteiligt sind, wird das unscharf: Felder fehlen, Typen ändern sich, und Fehler tauchen erst in Produktion auf.

    JSON Schema löst genau dieses Problem. Es beschreibt maschinenlesbar, welche Struktur JSON-Daten haben dürfen. So lassen sich Eingaben prüfen, Antworten absichern und Verträge zwischen Teams klar festhalten – ohne dass jedes Mal Interpretationsspielraum bleibt.

    Warum JSON-Daten ohne Schema oft schiefgehen

    Typische Fehlerbilder in APIs und Webapps

    Ohne feste Regeln wird Validierung oft „nach Gefühl“ umgesetzt: ein paar if-Abfragen, ein try/catch, und fertig. Das klappt, bis es nicht mehr klappt. Häufige Probleme sind:

    • Ein Feld kommt manchmal als Zahl, manchmal als String (z. B. "42" statt 42).
    • Optional gedachte Felder werden plötzlich vorausgesetzt oder umgekehrt.
    • Ein Client sendet zusätzliche Properties, die später versehentlich in der Datenbank landen.
    • Fehlermeldungen sind unklar („Invalid payload“), weil keine präzisen Regeln existieren.

    Das Ergebnis: Debugging kostet Zeit, und die Stabilität leidet. Wer schon einmal versucht hat, unklare API-Fehler sauber zu behandeln, kennt den Effekt. Passend dazu hilft auch der Blick auf API-Fehler richtig behandeln, weil gute Validierung und gute Fehlerantworten zusammengehören.

    Was ein „Schema“ in diesem Kontext bedeutet

    Ein Schema ist eine Beschreibung der erlaubten Form (Struktur) von Daten. Bei JSON heißt das zum Beispiel:

    • Welche Felder sind erlaubt?
    • Welche Felder sind Pflicht?
    • Welche Datentypen sind erlaubt (String, Number, Boolean, Objekt, Array)?
    • Welche Wertebereiche gelten (z. B. Mindestlänge, erlaubte Enum-Werte)?

    Statt diese Regeln in Prosa-Dokumentation zu verstecken, legt JSON-Datenvalidierung mit Schema die Regeln so fest, dass Tools sie automatisch prüfen können.

    JSON Schema Grundlagen: Aufbau, Begriffe, Denkweise

    Die wichtigsten Bausteine: type, properties, required

    Ein Schema ist selbst JSON. Für ein Objekt beginnt es meist mit type: "object" und beschreibt dann properties (Felder) sowie required (Pflichtfelder). Ein kleines Beispiel für ein „User“-Objekt:

    {
    "type": "object",
    "properties": {
    "id": { "type": "integer" },
    "email": { "type": "string", "format": "email" },
    "name": { "type": "string", "minLength": 1 }
    },
    "required": ["id", "email"],
    "additionalProperties": false
    }

    Wichtig: additionalProperties: false verhindert „Überraschungsfelder“. Das ist in APIs oft Gold wert, weil sonst unbemerkte Tippfehler oder veraltete Clients Daten einschleusen.

    Validierungsregeln, die im Alltag wirklich zählen

    Neben Pflichtfeldern und Typen werden häufig diese Regeln gebraucht:

    • minLength / maxLength für Strings
    • minimum / maximum für Zahlen
    • pattern für einfache Regex-Prüfungen (sparsam einsetzen)
    • enum für feste Werte (z. B. Status: "open", "done")
    • items für Arrays (welche Struktur hat jedes Element?)

    Damit lassen sich die meisten Request-Payloads zuverlässig prüfen, bevor Business-Logik startet.

    $schema und Versionsgedanke (kurz und praktisch)

    Viele Schemas enthalten ein Feld $schema. Das verweist auf die verwendete JSON-Schema-Version. Im Alltag heißt das: Validator und Schema sollten zusammenpassen. Wird ein Schema-Feature genutzt, das der Validator nicht kennt, entstehen falsche Ergebnisse oder unklare Fehlermeldungen.

    API-Requests absichern: Validierung vor der Business-Logik

    Wo Validierung im Request-Flow hingehört

    Eine gute Reihenfolge im Backend sieht oft so aus:

    • Request entgegennehmen
    • Payload gegen Schema validieren
    • Bei Fehler: klare 4xx-Antwort mit Details
    • Erst danach: Business-Logik, Datenbank, Side Effects

    So landet ungültiger Input gar nicht erst „tief“ im System. Das ergänzt klassische Maßnahmen wie Input-Validierung im Backend sinnvoll: JSON Schema ist dabei ein sehr konkretes Werkzeug.

    Fehlerausgaben: verständlich für Menschen, stabil für Clients

    Validatoren liefern oft Pfade wie /address/street plus eine Meldung („must be string“, „is required“). Diese Details sind nützlich, sollten aber in einer konsistenten API-Fehlerstruktur an den Client gehen. Ein Client kann dann pro Feld Feedback anzeigen, statt nur „Etwas ging schief“.

    Ein guter Nebeneffekt: Wer ohnehin sauber mit Statuscodes arbeitet, kann die Antwort klar halten. Dazu passt der Artikel API-Design mit Statuscodes.

    Mini-Fallbeispiel: Checkout-Adresse im Shop

    Ein Checkout ist ein klassischer Problemfall: Viele Felder, unterschiedliche Länderformate, optionale Angaben. Ohne Schema rutschen schnell Fälle durch, etwa zip als Zahl (führt zu abgeschnittenen führenden Nullen) oder country als freier Text.

    Mit Schema kann die Payload so eingegrenzt werden, dass:

    • zip als String behandelt wird (damit „01234“ möglich bleibt),
    • country nur aus erlaubten Codes besteht (enum),
    • unerwartete Felder blockiert werden (additionalProperties: false),
    • Pflichtfelder je nach Versandart getrennt geprüft werden (z. B. Rechnungsadresse optional).

    Das reduziert Folgefehler in Payment, Versandlabel-Erstellung und Support erheblich.

    Schema-Design: so bleiben Schemas wartbar

    Wiederverwendung mit $ref: Bausteine statt Copy-Paste

    Sobald mehrere Endpunkte ähnliche Strukturen nutzen (z. B. „Address“, „Money“, „Pagination“), lohnt sich Wiederverwendung. Dafür gibt es $ref, um Teile zu referenzieren. Das verhindert Copy-Paste und sorgt dafür, dass Änderungen nicht an zehn Stellen nachgezogen werden müssen.

    Wichtig ist hier eine klare Struktur im Repository: lieber wenige, gut benannte Bausteine als viele fast gleiche Varianten.

    Zusätzliche Properties: offen lassen oder strikt schließen?

    Die Frage „soll die API zusätzliche Felder akzeptieren?“ ist eine echte Produktentscheidung:

    • Strikt (additionalProperties: false): gut für kontrollierte Daten, weniger Überraschungen, einfacher zu debuggen.
    • Offen (true oder weglassen): kann Migrationen erleichtern, birgt aber das Risiko stiller Fehler.

    In den meisten Business-APIs ist „strikt“ die bessere Standardwahl. Wenn Offenheit nötig ist, dann bewusst und in klar begrenzten Bereichen (z. B. metadata-Objekt).

    Komplexe Bedingungen: oneOf/anyOf/allOf ohne Kopfweh

    Manchmal gibt es alternative Formen derselben Payload. Beispiel: Ein Artikel ist entweder „digital“ oder „physisch“ und hat je nach Typ andere Pflichtfelder. Dafür eignen sich Konstrukte wie:

    • oneOf: genau eine Variante muss passen
    • anyOf: mindestens eine Variante muss passen
    • allOf: Kombination mehrerer Regeln

    Praxis-Tipp: Varianten möglichst klar voneinander trennen, sonst werden Fehlermeldungen schwer verständlich. Lieber zwei saubere Teil-Schemas als ein gigantisches Schema mit vielen Ausnahmen.

    So geht’s: JSON Schema im Projekt einführen

    • Start mit einem Endpunkt, der häufig Fehler produziert (z. B. Registrierung oder Checkout).
    • Schema aus realen Beispieldaten ableiten und zunächst minimal halten (type, required, additionalProperties).
    • Validator in den Request-Flow setzen, bevor Daten verarbeitet werden.
    • Fehlerformat definieren: Feldpfad + kurze Meldung + Code.
    • Schemas als eigene Dateien versionieren und in Code-Reviews mitprüfen.
    • Schrittweise Regeln schärfen (enum, min/max), sobald das Team Stabilität sieht.

    Checkliste: Woran gute JSON Schemas erkennbar sind

    • API Contract ist klar: Pflichtfelder, Typen und erlaubte Felder sind eindeutig.
    • Unerwartete Felder werden bewusst behandelt (meist: blockiert).
    • Strings, die führende Nullen enthalten können (PLZ, IDs), sind als String modelliert.
    • Enums werden genutzt, wenn es feste Zustände gibt (Status, Rollen, Typen).
    • Schemas sind modular (Wiederverwendung statt Copy-Paste).
    • Validierungsfehler sind clientfreundlich (konkreter Feldpfad, verständliche Meldung).

    Häufige Fragen zu JSON Schema

    Ersetzt JSON Schema TypeScript-Types oder DTOs?

    Nein, es ergänzt sie. TypeScript-Types helfen zur Entwicklungszeit, JSON Schema prüft reale Laufzeitdaten. In vielen Teams ergibt sich ein gutes Zusammenspiel: Types fürs Frontend/Backend und Schema als gemeinsame Validierungs- und Vertragsbasis.

    Kann JSON Schema auch Responses prüfen?

    Ja. Gerade bei refactorings oder neuen Releases ist das hilfreich: Der Server kann testen, ob seine eigenen Antworten dem erwarteten Format entsprechen. So fallen Breaking Changes früh auf.

    Was ist besser: pattern (Regex) oder format?

    format ist lesbarer (z. B. „email“) und oft ausreichend. Regex sollte sparsam eingesetzt werden, weil sie schnell zu streng oder zu unverständlich wird. Wenn Regex nötig ist, dann kurz halten und gut testen.

    Wie passt Validierung zu Security?

    Validierung ist ein Sicherheitsbaustein, aber kein kompletter Schutz. Sie verhindert viele fehlerhafte oder unerwünschte Inputs, ersetzt aber keine Authentifizierung, keine Berechtigungsprüfung und keine Schutzmaßnahmen gegen typische Web-Risiken. Für Browser-Formulare ist zusätzlich relevant, wie Requests abgesichert werden, zum Beispiel mit CSRF-Schutz.

    Kleine Vergleichsbox: Validierung mit und ohne Schema

    Ansatz Vorteile Nachteile
    Manuelle if-Prüfungen Schnell für Mini-Payloads, keine extra Dateien Wächst schlecht, inkonsistent, Fehlermeldungen oft unklar
    Schema Validator (JSON Schema) Klare Regeln, wiederverwendbar, gute Fehlermeldungen, weniger Regressionen Einführung braucht Struktur, Team muss sich an Schema-Pflege gewöhnen

    Wer bereits an sauberer Architektur arbeitet, kann Schemas gut als Teil einer klaren Schichtung sehen: erst Validierung, dann Logik. Das passt auch zu dem Gedanken, Abhängigkeiten sauber zu halten, wie im Beitrag Dependency Injection in PHP.

    Share.
    Avatar-Foto

    Königshofen Digital - Websites, E-Commerce, SEO/SEA, Google Ads, Branding und Automation mit KI. Liefert effiziente, automatisierte und messbare Lösungen aus einer Hand.