Quando si scambiano dati tra applicazioni, servizi web o API, anche il più piccolo errore strutturale può compromettere l’intero processo. Ecco perché la validazione dei dati JSON è un passaggio essenziale in molti scenari, tra cui l’integrazione delle API, l’importazione/esportazione dei dati, la configurazione delle applicazioni e la comunicazione tra microservizi. 4D 21 R3 non è solo un aggiornamento alla bozza 2020-12, ma rappresenta un allineamento completo agli standard web e API moderni. Le validazioni JSON diventano più potenti, più espressive e pienamente compatibili con gli strumenti odierni.
Che cos’è uno schema?
Uno schema JSON consente di descrivere con precisione la struttura prevista di un documento: tipi di dati, campi obbligatori, valori consentiti e formati (e-mail, URL, ecc.).
Grazie a questo schema, è possibile garantire la qualità e l’affidabilità degli scambi di dati senza dover scrivere manualmente codice di verifica. Se il JSON ricevuto non è conforme alle regole definite, 4D indica esattamente dove e perché la validazione fallisce.
Ciò consente di risparmiare tempo, aumenta la sicurezza delle applicazioni e fornisce una solida base per la progettazione di interfacce robuste o servizi web affidabili.
4D offre il comando `JSON Validate ` per confrontare un oggetto JSON con uno schema conforme allo standard JSON Schema. Con 4D 21 R3, questo comando fa un grande balzo in avanti; ora supporta le versioni più recenti dello standard (Draft 2020-12), offrendo maggiore flessibilità, nuove parole chiave (const, if/then/else, unevaluatedProperties, …), la validazione nativa delle date 4D e una migliore interoperabilità con gli strumenti moderni.
Esempio: utilizzo delle regole condizionali
Il nuovo standard JSON Schema introduce potenti regole condizionali, consentendo di codificare parte della logica di business direttamente nello schema, cosa che era complicata o impossibile con Draft-04.
Prendiamo un esempio classico: la convalida di un pagamento in base al metodo selezionato. A seconda del metodo di pagamento:
- se si tratta di una carta di credito, devono essere forniti “cardNumber” e “expiryDate”,
- se si tratta di un bonifico bancario, sono richiesti “iban” e “bic”,
- altrimenti (ad esempio, pagamenti in contanti), nessuno di questi campi è richiesto.
Con Draft-04, era necessario implementare manualmente tutti questi controlli nel codice 4D. Lo schema poteva definire solo tipi, vincoli di base e campi obbligatori, ma non era in grado di esprimere una logica condizionale del tipo “se paymentMethod = credit_card allora richiedere cardNumber ed expiryDate”.
Draft-2020-12 cambia tutto. Ora è possibile definire queste regole condizionali direttamente nello schema JSON. Ecco un esempio pratico:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Schema dell'ordine",
"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"] }
}
}
Questo schema combina:
- espressioni regolari (pattern) per controllare il formato dei numeri;
- regole condizionali (if/then/else) per adattare i campi obbligatori a seconda del tipo di pagamento.
Quindi, sul lato 4D, è sufficiente convalidare la risposta:
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
Grazie alla validazione integrata, il codice 4D rimane semplice: non è necessario verificare manualmente le condizioni in base al metodo di pagamento.
Lo schema diventa una vera e propria specifica funzionale che può essere condivisa tra il team di backend, il front-end o persino i partner di terze parti.
Compatibilità
Ogni schema JSON specifica lo standard da utilizzare tramite l’attributo $schema.
In 4D sono supportati solo due parser JSON Schema:
- Draft-04
- Draft 2020-12
Il parser selezionato è determinato esclusivamente dal valore della proprietà $schema nel documento dello schema JSON.
Ad esempio:
- Per utilizzare Draft-04:
"$schema": "http://json-schema.org/draft-04/schema#"
- Per utilizzare la bozza 2020-12:
"$schema": "https://json-schema.org/draft/2020-12/schema"
Ciò significa che i vostri schemi esistenti basati su Draft-04 continueranno a funzionare perfettamente, lasciandovi comunque la libertà di adottare la nuova versione secondo i vostri tempi.
Se l’attributo $schema non è specificato, 4D utilizza per impostazione predefinita la bozza Draft-04. Tuttavia, consigliamo vivamente di specificare lo standard da utilizzare. Se condividi il tuo schema per convalidare le risposte dalla tua API REST o per spiegare il formato di risposta a un’intelligenza artificiale, è necessario che sappiano quale versione dello schema stai utilizzando.
Punti chiave
Con 4D 21 R3, il comando JSON Validate è allineato ai moderni standard di validazione JSON, rendendo possibile la validazione dei dati provenienti da API di IA o da qualsiasi altro servizio web. I vantaggi sono:
- supporto per il più recente standard JSON Schema,
- nuove parole chiave più potenti,
- migliore compatibilità con gli strumenti del settore,
- pur mantenendo la compatibilità con gli schemi esistenti.
Combinando JSON Validate con le chiamate API nei vostri progetti 4D, rafforzate l’affidabilità delle vostre integrazioni AI e proteggete i vostri flussi di dati, senza alcuno sforzo aggiuntivo. Questo aggiornamento posiziona 4D tra le piattaforme in grado di parlare il linguaggio delle moderne API, dei microservizi e dell’AI generativa.
Al momento non è possibile lasciare commenti su questo post.