JSON vor API-Anfragen validieren

Ein schneller Validierungsschritt vor einer API-Anfrage trennt JSON-Syntaxprobleme klar von Authentifizierungs-, Schema- und Backend-Fehlern.

Warum vor dem Senden validieren

Wenn ein API-Request fehlschlägt, kann die Fehlermeldung auf Authentifizierung, Berechtigungen, Schema-Validierung oder fehlerhaftes JSON deuten. Den JSON-Body vorher zu validieren entfernt eine ganze Fehlerklasse, bevor der Request am Server ankommt. Außerdem werden kopierte cURL-Befehle, Postman-Bodies, Webhook-Samples und Integrationstests leichter zu reviewen.

Welche Syntaxchecks laufen sollten

Eine strikte JSON-Validierung sollte bestätigen, dass der Body als JSON parst und dass die formatierte Ausgabe dem entspricht, was du senden wolltest.

  • Jeder String und jeder Objektschlüssel benutzt doppelte Anführungszeichen
  • Keine Kommentare oder nachgestellten Kommas
  • Booleans sind true oder false, nicht True oder False
  • Fehlende Werte sind null oder weggelassen, nicht undefined
  • Der Top-Level-Wert passt zur Erwartung des Endpoints

Header zählen auch

Ein gültiger JSON-Body kann immer noch scheitern, wenn der Request den falschen Content-Type meldet. Für die meisten JSON-APIs schickst du Content-Type: application/json. Prüft das Endpoint auch Accept, ergänze Accept: application/json, damit Client und Server sich aufs Format einigen.

Fehlerhafter Request-Body

{ userId: 42, active: True, tags: ['beta',], }

Korrigierter Request-Body

{ "userId": 42, "active": true, "tags": ["beta"] }

Nach der Syntaxvalidierung

Syntaxvalidierung beweist nur, dass das Dokument parsbar ist. Für Produktions-Requests prüfst du außerdem das Schema: Pflichtfelder, unbekannte Felder, Wertetypen, Array-Längen, Enum-Werte, Datums-Strings und ob numerische Identifier Zahlen oder Strings sein sollen.

Debugging-Tipp

Wenn der Server gültiges JSON weiter ablehnt, vergleiche den formatierten Request-Body mit einem bekannt-guten Beispiel. Ein semantisches JSON-Diff findet echte Wertänderungen, während es Schlüsselreihenfolge ignoriert — besonders nützlich bei Payloads aus unterschiedlichen Tools.

Ein kleiner fetch + Ajv-Wrapper

Validiere den Response-Body gegen ein bekanntes Schema, bevor du ihn deinem App-Code übergibst. Das Schema beim Modul-Load einmal kompilieren und jeden Call schützen: const validate = ajv.compile(schema); const res = await fetch(url); const data = await res.json(); if (!validate(data)) throw new Error("Schema mismatch: " + ajv.errorsText(validate.errors)); return data; — Vertragsbrüche fallen so an der Grenze auf und nicht fünf Schichten tiefer.