Beim Datenaustausch zwischen Anwendungen, Webdiensten oder APIs kann schon der kleinste strukturelle Fehler alles zum Erliegen bringen. Deshalb ist die JSON-Datenvalidierung in vielen Szenarien ein unverzichtbarer Schritt, darunter API-Integration, Datenimport/-export, Anwendungskonfiguration und Kommunikation zwischen Microservices. 4D 21 R3 ist nicht nur ein Update des Entwurfs 2020-12, sondern eine vollständige Anpassung an moderne Web- und API-Standards. JSON-Validierungen werden leistungsfähiger, ausdrucksstärker und vollständig kompatibel mit den heutigen Tools.
Was ist ein Schema?
Mit einem JSON-Schema können Sie die erwartete Struktur eines Dokuments präzise beschreiben: Datentypen, Pflichtfelder, zulässige Werte und Formate (E-Mail, URL usw.).
Dank dieses Schemas können Sie die Qualität und Zuverlässigkeit Ihres Datenaustauschs gewährleisten, ohne manuell Validierungscode schreiben zu müssen. Wenn das empfangene JSON nicht den definierten Regeln entspricht, teilt Ihnen 4D genau mit, wo und warum die Validierung fehlschlägt.
Dies spart erheblich Zeit, erhöht die Sicherheit Ihrer Anwendungen und bietet eine solide Grundlage für die Entwicklung robuster Schnittstellen oder zuverlässiger Webdienste.
4D bietet den Befehl „JSON Validate “ an, um ein JSON-Objekt mit einem Schema zu vergleichen, das dem JSON-Schema-Standard entspricht. Mit 4D 21 R3 macht dieser Befehl einen großen Sprung nach vorne; er unterstützt nun die neuesten Versionen des Standards (Draft 2020-12) und bietet größere Flexibilität, neue Schlüsselwörter (const, if/then/else, unevaluatedProperties, …), native 4D-Datumsvalidierung und bessere Interoperabilität mit modernen Tools.
Beispiel: Verwendung bedingter Regeln
Der neue JSON-Schema-Standard führt leistungsstarke bedingte Regeln ein, mit denen Sie einen Teil Ihrer Geschäftslogik direkt in das Schema kodieren können – etwas, das mit Draft-04 umständlich oder unmöglich war.
Nehmen wir ein klassisches Beispiel: die Validierung einer Zahlung in Abhängigkeit von der gewählten Methode. Je nach Zahlungsmethode:
- Wenn es sich um eine Kreditkarte handelt, müssen „cardNumber“ und „expiryDate“ angegeben werden,
- bei einer Banküberweisung sind „iban“ und „bic“ erforderlich,
- ansonsten (z. B. bei Barzahlungen) ist keines dieser Felder erforderlich.
Mit Draft-04 mussten Sie all diese Prüfungen manuell in Ihrem 4D-Code implementieren. Das Schema konnte nur Typen, grundlegende Einschränkungen und Pflichtfelder definieren, aber keine bedingte Logik wie „if paymentMethod = credit_card then require cardNumber and expiryDate“ ausdrücken.
Draft-2020-12 ändert alles. Sie können diese bedingten Regeln nun direkt im JSON-Schema definieren. Hier ein praktisches Beispiel:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Order Schema",
"type": "object",
"properties": {
"orderId": { "type": "integer" },
"customer": { "type": "string" },
"amount": { "type": "number", "minimum": 0 },
"paymentMethod": {
"type": "string",
"enum": ["credit_card", "bank_transfer", "cash"]
},
"cardNumber": { "type": "string", "pattern": "^[0-9]{16}$" },
"expiryDate": { "type": "string", "pattern": "^(0[1-9]|1[0-2])/[0-9]{2}$" },
"iban": { "type": "string" },
"bic": { "type": "string" }
},
"required": ["orderId", "customer", "amount", "paymentMethod"],
"if": { "properties": { "paymentMethod": { "const": "credit_card" } } },
"then": { "required": ["cardNumber", "expiryDate"] },
"else": {
"if": { "properties": { "paymentMethod": { "const": "bank_transfer" } } },
"then": { "required": ["iban", "bic"] }
}
}
Dieses Schema kombiniert:
- reguläre Ausdrücke (Muster) zur Steuerung des Zahlenformats;
- bedingte Regeln (if/then/else), um die erforderlichen Felder je nach Zahlungsart anzupassen.
Anschließend validieren Sie auf der 4D-Seite einfach die Antwort:
var $response; $schema; $result : Object
$response := JSON Parse($json; *)
$schema := JSON Parse($jsonSchema)
$result := JSON Validate($response; $schema)
If ($result.success)
// your treatment
Else
// manage errors
End if
Dank der integrierten Validierung bleibt Ihr 4D-Code einfach: Es ist nicht notwendig, Bedingungen basierend auf der Zahlungsmethode manuell zu testen.
Das Schema wird zu einer echten Funktionsspezifikation, die im Backend-Team, im Frontend oder sogar mit Drittanbietern geteilt werden kann.
Kompatibilität
Jedes JSON-Schema legt über das Attribut $schema den zu verwendenden Standard fest.
In 4D werden nur zwei JSON-Schema-Parser unterstützt:
- Draft-04
- Draft 2020-12
Der ausgewählte Parser wird ausschließlich durch den Wert der Eigenschaft $schema im JSON-Schema-Dokument bestimmt.
Beispiel:
- Um Draft-04 zu verwenden:
"$schema": "http://json-schema.org/draft-04/schema#"
- Um Draft 2020-12 zu verwenden:
"$schema": "https://json-schema.org/draft/2020-12/schema"
Das bedeutet, dass Ihre bestehenden Schemata, die auf Draft-04 basieren, weiterhin einwandfrei funktionieren, während Sie gleichzeitig die Freiheit haben, die neue Version in Ihrem eigenen Tempo zu übernehmen.
Wenn das Attribut $schema nicht angegeben ist, verwendet 4D standardmäßig Draft-04. Wir empfehlen jedoch dringend, den zu verwendenden Standard anzugeben. Wenn Sie Ihr Schema teilen, um Antworten Ihrer REST-API zu validieren oder um einer KI das Antwortformat zu erklären, muss diese wissen, welche Version des Schemas Sie verwenden.
Wichtige Erkenntnisse
Mit 4D 21 R3 wurde der Befehl „JSON Validate“ an moderne JSON-Validierungsstandards angepasst, sodass Daten aus KI-APIs oder anderen Webdiensten validiert werden können. Sie profitieren von:
- Unterstützung für den neuesten JSON-Schema-Standard,
- leistungsfähigeren neuen Schlüsselwörtern,
- verbesserter Kompatibilität mit Branchen-Tools,
- bei gleichzeitiger Beibehaltung der Kompatibilität mit Ihren bestehenden Schemata.
Durch die Kombination von JSON Validate mit API-Aufrufen in Ihren 4D-Projekten stärken Sie die Zuverlässigkeit Ihrer KI-Integrationen und sichern Ihre Datenflüsse, ohne zusätzlichen Aufwand. Dieses Update positioniert 4D unter den Plattformen, die die Sprache moderner APIs, Microservices und generativer KI sprechen.
Für diesen Beitrag sind derzeit keine Kommentare verfügbar.