Vai al contenuto principale
riqo.ioStrumenti per grandi idee

YAML: sintassi, tipi e strutture

Una guida a YAML come formato di serializzazione leggibile: scalari, collezioni, indentazione, anchor e insidie di parsing.

Concetto e contesto

YAML è un formato di serializzazione orientato alla leggibilità umana, molto usato per configurazioni e documenti dichiarativi.

La sintassi compatta riduce parentesi e virgolette rispetto a JSON, ma rende significativi indentazione e contesto.

Per inquadrare correttamente il tema conviene distinguere sempre il concetto astratto dalla sua rappresentazione concreta e dal contesto in cui viene utilizzato. Questa separazione evita di trasferire automaticamente assunzioni valide in un protocollo, una libreria o un formato verso ambienti che possono applicare regole differenti.

Fondamenti e terminologia

I nodi YAML possono essere scalari, sequenze o mapping, e gli scalari possono essere rappresentati in forma plain, quoted, literal o folded.

Versione del parser e schema di risoluzione influenzano il modo in cui stringhe apparentemente semplici vengono interpretate come booleani, numeri o date.

La terminologia va letta insieme allo standard, alla versione o al contratto che la definisce: parole simili possono indicare proprietà diverse a seconda del livello considerato. Rendere esplicite queste definizioni migliora interoperabilità, documentazione e capacità di diagnosticare risultati inattesi.

Come funziona

L'indentazione definisce la gerarchia mentre trattini e due punti introducono sequenze e mapping.

Anchor e alias consentono di riusare nodi, ma possono complicare la lettura e alcuni parser applicano limiti per prevenire espansioni eccessive.

Nel funzionamento reale è utile seguire il percorso dei dati attraverso i diversi livelli, osservando quali trasformazioni sono reversibili, quali introducono vincoli e dove può andare persa informazione. Questo modello rende più semplice stabilire responsabilità tra producer, consumer, storage e rete.

Esempio ragionato

Una configurazione con services, ports e environment mostra bene strutture annidate senza molte parentesi.

Un valore come 00123, yes o una data può però essere interpretato diversamente da quanto previsto se non viene quotato e il parser usa regole di risoluzione inattese.

Un esempio è davvero riutilizzabile quando chiarisce non soltanto il risultato finale, ma anche le precondizioni e le proprietà che restano invarianti. Cambiando un'assunzione alla volta si può capire quali parti dell'esempio appartengono allo standard e quali sono invece scelte applicative.

Errori e misconception

YAML non è semplicemente JSON senza parentesi e non tutti i parser supportano allo stesso modo tag, anchor o versioni della specifica.

Errori di indentazione, tab, duplicazione di chiavi e coercizione implicita dei tipi sono tra i problemi più comuni.

Molti errori nascono da assunzioni implicite tra sistemi che sembrano compatibili ma adottano versioni, canonicalizzazioni o modelli di tipo differenti. Nei casi di interoperabilità o sicurezza conviene quindi trattare gli input anomali come casi da specificare e testare, non come eccezioni trascurabili.

Best practice e criteri di scelta

Usa una versione e una libreria definite, evita costrutti avanzati quando l'interoperabilità conta e quota i valori ambigui.

Per configurazioni machine-to-machine semplici JSON può essere più prevedibile, mentre YAML è spesso preferibile quando la modifica manuale è parte centrale del flusso.

Una pratica robusta combina standard documentati, librerie mature, contratti espliciti e test con casi limite rappresentativi. La scelta migliore non è sempre quella più compatta o diffusa: va valutata rispetto a portabilità, leggibilità, prestazioni, sicurezza, evoluzione e costo operativo.

Guide correlate

JSON vs YAML vs XML: quale formato scegliere

Confronto ragionato tra JSON, YAML e XML per API, configurazione, documenti, schema e interoperabilità.

XML: elementi, attributi, namespace e documenti

Fondamenti di XML: struttura ad albero, attributi, namespace, encoding, validazione e interoperabilità.

Serializzazione e deserializzazione dei dati

Come strutture in memoria diventano rappresentazioni trasferibili e quali problemi emergono tra tipi, versioni e sistemi diversi.

JSON Schema: descrivere e validare strutture dati

Come JSON Schema esprime tipi, proprietà, vincoli, composizione e compatibilità dei documenti JSON.