JSON Schema: dalle basi alla produzione
Le parole chiave sono molte, ma solo una dozzina vengono usate ogni giorno. Metti a posto type/properties/required/$ref, gestisci bene i messaggi di errore, e copri l'ottanta per cento dei casi reali.
Descrivi la forma dei tuoi dati con JSON Schema, trasforma gli accordi verbali in validazione eseguibile, e lascialo guidare a turno i tipi TypeScript e la generazione dei form.
7 articoliLe parole chiave sono molte, ma solo una dozzina vengono usate ogni giorno. Metti a posto type/properties/required/$ref, gestisci bene i messaggi di errore, e copri l'ottanta per cento dei casi reali.
Tipi e schema coprono ciascuno un segmento: uno in fase di compilazione, uno a runtime. La domanda non è quale scegliere, ma come tenere i due sincronizzati automaticamente.
Gli schema generati spesso bloccano dati validi. Scopri perché campioni più ricchi producono schema peggiori, poi il flusso di lavoro: campionamento multi-record, completamento semantico, localizzazione degli errori.
$ref risolve il riutilizzo, allOf e oneOf risolvono la composizione, ed è impilandoli entrambi che le cose si rompono. Copre $id, $defs, condizionali, ricorsione, bundling e debugging.
Un validatore emette errori leggibili dalla macchina; gli utenti vogliono sapere quale casella di input è sbagliata. Copre l'array errors di Ajv, instancePath versus schemaPath, raggruppamento e formulazione.
Una validazione superata non significa dati puliti. Pydantic ignora i campi sconosciuti per impostazione predefinita, Zod li rimuove, Ajv li lascia passare — parametri allucinati e chiavi sbagliate attraversano in silenzio. L'articolo mostra le tre forme di accettazione silenziosa e fornisce ricette complete: chiudere gli oggetti, controllare la coercizione, serrare ogni livello di annidamento.
Uno schema non finisce quando è scritto — lì inizia il degrado. Un refuso rilassa la validazione in silenzio, un refactoring rompe tutte le fixture. Questa guida illustra un'impostazione di test contrattuali attuabile: fixture positivi, negativi e snapshot, lint dello schema stesso, compilazione una tantum riutilizzata e quattro porte CI che trasformano la rottura del contratto in una build rossa.