Hva er YAML-filformatet?
.yaml er et tekstfilformat som brukes til å utveksle data mellom ulike applikasjoner. YAML - forkortelse for *YAML Ain't Markup Language* - er en standard for å organisere informasjon i et menneskevennlig, plattformuavhengig format ved bruk av innrykksbaserte key: value-par kodet i UTF-8. Parsing av .yaml-filer krever at et YAML-bibliotek er installert; populære biblioteker inkluderer PyYAML (Python), js-yaml (JavaScript) og SnakeYAML (Java). .yaml-filer lagres noen ganger med filendelsen .yml, som er funksjonelt identisk. Utover datautveksling brukes .yaml-filer vanligvis til serialisering av data og for å skrive konfigurasjonsfiler i verktøy som Docker Compose, Kubernetes og GitHub Actions.
Serialisering
Serialisering er et begrep som brukes i informatikk. Serialisering er en prosess for å oversette data eller objekter til et format som kan lagres, overføres og rekonstrueres senere. For eksempel må to institusjoner som utveksler data i et standardisert format ved hjelp av ulike applikasjoner, serialisere disse dataene før de sendes. Serialiserte data kan også lagres i en fil - .yaml, .xml, .json, .toml, osv. - og deretter sendes til mottakerne.
Et .yaml-dokument kan valgfritt begynne med dokumentstart-markøren --- og slutte med ...; dette tillater også flere dokumenter i én enkelt fil. Siden YAML 1.2 (2009, revidert 2021), er enhver gyldig JSON-fil også gyldig YAML.
Sikkerhet og trygghet
RISIKO: MEDIUMEn YAML-fil er ren tekst og kjører ikke av seg selv, så det er trygt å lese en. To reelle risikoer: (1) konfigurasjons-YAML (CI-pipelines, Compose, K8s, Ansible) inneholder ofte hemmeligheter - tokens, passord, nøkler - så ikke lim den inn i upålitelige online-validatorer eller publiser den offentlig. (2) Programmatisk fare: lasting av upålitelig YAML med en utrygg parser (f.eks. PyYAMLs yaml.load i stedet for yaml.safe_load) kan utføre vilkårlige objekter/kode - bruk alltid den sikre lasteren for filer du ikke stoler på. Redigeringsrisiko: en tabulator eller et feiljustert mellomrom endrer betydningen lydløst, så valider etter redigering.
Formatdetaljer
i et nøtteskallProgrammer som åpner YAML-filer
Tekniske detaljer
dyp spesifikasjon| Filendelse | .yaml (også .yml) |
| MIME-type | application/yaml |
| Koding | UTF-8 ren tekst; ingen binær header eller magic bytes |
| Struktur | Innrykksbaserte key: value-par; innrykk bruker kun mellomrom - tabulatorer er forbudt i spesifikasjonen |
| Dokumentmarkører | --- markerer dokumentstart, ... markerer dokument-slutt; flere dokumenter kan eksistere i én fil |
| Innfødte datatyper | Strenger, heltall, flyttall, boolske verdier, null, sekvenser (lister), mappinger (ordbøker), tidsstempler |
| Spesifikasjonsversjon | YAML 1.2 (2009, revidert 2021); erstatter YAML 1.1 (2005) og YAML 1.0 (2001) |
| JSON-kompatibilitet | Siden YAML 1.2 er ethvert gyldig JSON-dokument også gyldig YAML - JSON er en streng delmengde |
| Kommentarer | Enlinjes kommentarer introduseres med # ; kan stå på egen linje eller på samme linje etter en verdi |
| Flerlinje-strenger | Literal block scalar (|) bevarer linjeskift; folded scalar (>) konverterer linjeskift til mellomrom |
| Ankere og aliaser | & definerer et navngitt anker og * refererer (aliaser) til det, noe som muliggjør gjenbruk av verdier uten duplisering |
| Utviklere | Clark Evans, Ingy döt Net, Oren Ben-Kiki |
| Vanlige bruksområder | Konfigurasjonsfiler (Kubernetes, Docker Compose, GitHub Actions, Ansible), dataserialisering, OpenAPI-definisjoner |
| Anførselstegn | Strenger uten anførselstegn, med enkle ('...') og doble («...») anførselstegn støttes; doble tillater escape-sekvenser |
| Utgitt | 2001 (YAML 1.0); YAML 1.1 (2005); current YAML 1.2 (2009, revised 2021) |
| Åpen standard | Ja · royalty-fri |
| Spesifikasjon | yaml.org |