Che cos'è il formato di file YAML?
.yaml è un formato di file di testo utilizzato per lo scambio di dati tra varie applicazioni. YAML - acronimo di *YAML Ain't Markup Language* - è uno standard per organizzare le informazioni in un formato leggibile dall'uomo e indipendente dalla piattaforma, utilizzando coppie key: value basate sull'indentazione e codificate in UTF-8. L'analisi dei file .yaml richiede l'installazione di una libreria YAML; tra le librerie più popolari figurano PyYAML (Python), js-yaml (JavaScript) e SnakeYAML (Java). I file .yaml vengono talvolta salvati con l'estensione .yml, che è funzionalmente identica. Oltre allo scambio di dati, i file .yaml sono tipicamente utilizzati per la serializzazione dei dati e per la scrittura di file di configurazione in strumenti come Docker Compose, Kubernetes e GitHub Actions.
Serializzazione
La serializzazione è un termine utilizzato nell'informatica. È il processo di traduzione di dati o oggetti in un formato che può essere memorizzato, trasmesso e ricostruito in seguito. Ad esempio, due istituzioni che scambiano dati in un formato standardizzato utilizzando applicazioni diverse devono serializzare tali dati prima di inviarli. I dati serializzati possono anche essere memorizzati in un file - .yaml, .xml, .json, .toml, ecc. - e poi inviati ai destinatari.
Un documento .yaml può facoltativamente iniziare con il marcatore di inizio documento --- e terminare con ...; questo consente anche la presenza di più documenti all'interno di un singolo file. A partire da YAML 1.2 (2009, revisionato nel 2021), ogni file JSON valido è anche un file YAML valido.
Sicurezza e incolumità
RISCHIO: MEDIUMUn file YAML è testo semplice e non si esegue da solo, quindi leggerne uno è sicuro. Due rischi reali: (1) i file YAML di configurazione (pipeline CI, Compose, K8s, Ansible) contengono spesso segreti - token, password, chiavi - quindi non incollarli in validatori online non attendibili né pubblicarli. (2) Pericolo programmatico: caricare YAML non attendibile con un parser non sicuro (es. yaml.load di PyYAML invece di yaml.safe_load) può eseguire oggetti o codice arbitrari - usa sempre il caricatore sicuro per i file di cui non ti fidi. Rischio di modifica: un tabulatore o uno spazio disallineato cambiano silenziosamente il significato, quindi convalida dopo la modifica.
Dettagli del formato
in sintesiProgrammi che aprono file YAML
Dettagli tecnici
specifiche approfondite| Estensione del file | .yaml (anche .yml) |
| Tipo MIME | application/yaml |
| Codifica | Testo semplice UTF-8; nessun header binario o magic bytes |
| Struttura | Coppie chiave: valore basate sull'indentazione; l'indentazione usa solo spazi - i tabulatori sono vietati dalle specifiche |
| Marcatori di documento | --- segna l'inizio del documento, ... segna la fine; più documenti possono coesistere in un unico file |
| Tipi di dati nativi | Stringhe, interi, float, booleani, null, sequenze (liste), mappature (dizionari), timestamp |
| Versione specifica | YAML 1.2 (2009, revisionato nel 2021); sostituisce YAML 1.1 (2005) e YAML 1.0 (2001) |
| Compatibilità JSON | A partire da YAML 1.2, ogni documento JSON valido è anche un documento YAML valido - JSON è un sottoinsieme rigoroso |
| Commenti | Commenti su riga singola introdotti da # ; possono apparire su una riga propria o in linea dopo un valore |
| Stringhe multilinea | Lo scalare a blocchi letterale (|) preserva i ritorni a capo; lo scalare ripiegato (>) converte i ritorni a capo in spazi |
| Ancore e alias | & definisce un'ancora con nome e * vi fa riferimento (alias), consentendo il riutilizzo dei valori senza duplicazioni |
| Sviluppatori | Clark Evans, Ingy döt Net, Oren Ben-Kiki |
| Casi d'uso comuni | File di configurazione (Kubernetes, Docker Compose, GitHub Actions, Ansible), serializzazione dei dati, definizioni OpenAPI |
| Virgolette | Supportate stringhe senza virgolette, con virgolette singole ('...') e doppie ("..."); le virgolette doppie consentono sequenze di escape |
| Rilasciato | 2001 (YAML 1.0); YAML 1.1 (2005); current YAML 1.2 (2009, revised 2021) |
| Standard aperto | Sì · royalty-free |
| Specifica | yaml.org |