Als je werkt met Docker, Kubernetes, GitHub Actions of vrijwel elke moderne DevOps-tool, gebruik je al YAML, of je het nu beseft of niet. YAML (wat staat voor "YAML Ain't Markup Language" — ja, het is een recursief acroniem) is ontworpen om het meest leesbare dataformaat voor mensen te zijn.
Laten we het samen leren, één concept tegelijk.
Waarom YAML bestaat
JSON is geweldig voor machines, maar heb je ooit geprobeerd een configuratiebestand van 200 regels in JSON te schrijven? Geen commentaar, overal verplichte dubbele aanhalingstekens, vijf niveaus diep geneste accolades... dat wordt snel vervelend. YAML is gemaakt om dit op te lossen. Het gebruikt indentatie in plaats van haakjes, waardoor configuraties er schoon en overzichtelijk uitzien.
Hier zijn dezelfde gegevens in JSON en YAML. Zie je het verschil?
JSON:
YAML:
De basis die je moet kennen
Sleutel-waardeparen zijn het fundament van YAML. Gebruik gewoon een dubbele punt en een spatie: name: John Doe. Dat is het — geen aanhalingstekens nodig voor de meeste strings.
Indentatie is alles. YAML gebruikt spaties (nooit tabs!) om structuur te tonen. De standaard is 2 spaties per niveau. Doe dit fout en je bestand werkt niet meer. Serieus — de YAML-specificatie is hier streng over.
Hier is een voorbeeld van geneste gegevens:
Lijsten gebruiken een streepje en een spatie. Hier is een boodschappenlijstje in YAML:
Strings: lastiger dan je denkt
De meeste strings hebben geen aanhalingstekens nodig in YAML. Maar je zou ze moeten gebruiken als ze dubbele punten, hekjes bevatten of verkeerd geïnterpreteerd kunnen worden. Bijvoorbeeld, country: NO wordt geïnterpreteerd als country: false in YAML 1.1 omdat NO als boolean wordt behandeld. Dit is het beruchte "Noorwegen-probleem" en het heeft echte bugs in productie veroorzaakt.
Bij twijfel, zet het tussen aanhalingstekens: country: "NO"
Multi-line strings zijn geweldig
Hier laat YAML echt zijn kracht zien. De pipe | behoudt regelafbrekingen (ideaal voor scripts), terwijl > ze omzet naar spaties (ideaal voor lange beschrijvingen):
Ankers en aliassen: DRY-configuratiebestanden
Een van de coolste functies van YAML. Definieer iets eenmalig met &, verwijs er later naar met *:
Het production-blok erft retries: 3 van defaults maar overschrijft timeout. Dit is ongelooflijk handig in GitHub Actions workflows en Docker Compose-bestanden waar je anders dezelfde configuratieblokken steeds zou herhalen.
De 4 meest voorkomende YAML-fouten
- Tabs in plaats van spaties — Je editor voegt mogelijk standaard tabs in. Stel hem in om spaties te gebruiken voor YAML-bestanden. Serieus, doe dit nu.
- Boolean-valkuilen —
yes,no,on,off,true,falsezijn ALLEMAAL booleans in YAML 1.1. Gebruik aanhalingstekens als je de string bedoelt. - Dubbele punten in waarden —
message: Error: file not foundzal breken omdat YAML een tweede sleutel-waardescheider ziet. Gebruik aanhalingstekens:message: "Error: file not found" - Spaties aan het einde — Onzichtbare spaties aan het einde van regels kunnen vreemd parsing-gedrag veroorzaken. Gebruik een editor die trailing whitespace markeert.
Waar je YAML elke dag gebruikt
YAML is de configuratietaal voor Docker Compose, Kubernetes-manifesten, GitHub Actions, GitLab CI, Ansible playbooks en tientallen andere tools. Als je iets doet in DevOps of de cloud, is YAML-vaardigheid onmisbaar.
Heb je een YAML-bestand dat raar doet? Plak het in onze YAML Validator om het probleem direct te vinden.
Praktijkvoorbeeld: Docker Compose
Laten we een realistisch Docker Compose-bestand bekijken — het soort bestand dat je daadwerkelijk zou schrijven voor een webapplicatie:
Let op een paar dingen: de omgevingsvariabelen kunnen als lijst (- KEY=value) of als mapping (KEY: value) worden geschreven. Beide werken in Docker Compose — maar kies één stijl en houd je eraan voor consistentie.
Praktijkvoorbeeld: GitHub Actions CI-pipeline
Hier is een GitHub Actions workflow die tests uitvoert bij elke push:
Dit is schoon, leesbaar en spreekt voor zich. Stel je voor dat je dezelfde workflow in JSON zou schrijven — het zou twee keer zo lang zijn en visueel veel moeilijker te scannen.
YAML vs JSON vs TOML: Snelle vergelijking
YAML is niet het enige alternatief voor JSON voor configuratiebestanden. TOML is een andere populaire keuze (gebruikt door Rust's Cargo.toml en Python's pyproject.toml). Zo verhouden ze zich:
| Eigenschap | YAML | JSON | TOML |
| Commentaar | Ja (#) | Nee | Ja (#) |
| Leesbaarheid | Uitstekend | Goed | Zeer goed |
| Geneste structuren | Indentatie | Accolades | Secties/punten |
| Multi-line strings | Ja (` | , >`) | Nee | Ja (""") |
| Type-inferentie | Ja (kan gevaarlijk zijn) | Expliciet | Ja (veiliger) |
| Trailing komma's | N/A | Niet toegestaan | Toegestaan |
| Ecosysteem | DevOps, K8s, CI/CD | Web APIs, Node.js | Rust, Python |
Geavanceerd YAML: Meerdere documenten in één bestand
YAML ondersteunt meerdere documenten in één bestand, gescheiden door ---. Dit wordt vaak gebruikt in Kubernetes om meerdere resources tegelijk te deployen:
Het ----scheidingsteken vertelt de YAML-parser "dit is een nieuw document." Je kunt kubectl apply -f uitvoeren op zo'n bestand en Kubernetes zal beide resources aanmaken.
YAML-beveiliging: De Billion Laughs-aanval
Hier is iets dat de meeste beginners niet weten: YAML kan een beveiligingsrisico zijn als je niet oppast. De "Billion Laughs"-aanval gebruikt ankers en aliassen om exponentiële data-expansie te creëren:
Dit kleine bestand kan in het geheugen uitbreiden tot gigabytes en je applicatie laten crashen. De les? Parse nooit onvertrouwde YAML-invoer. Gebruik veilige laadfuncties zoals yaml.safe_load() in Python in plaats van yaml.load(), en stel geheugenlimieten in op je YAML-parser.
Converteren tussen YAML en JSON
Aangezien YAML een superset van JSON is (ja, geldige JSON is ook geldige YAML!), is het converteren tussen de twee eenvoudig. Dit is handig wanneer je de leesbaarheid van YAML wilt gebruiken voor het schrijven van configuraties, maar JSON nodig hebt voor een API of tool die het vereist.
Onze YAML naar JSON Converter regelt dit direct — plak gewoon je YAML en krijg schone JSON-uitvoer. De andere kant op? Elke JSON die je hebt is al geldige YAML.
Probeer het zelf
Of je nu een kapot Kubernetes-manifest debugt of een nieuwe CI-pipeline opzet, deze tools besparen je tijd:
- YAML Formatter — Herstel de indentatie en maak je YAML-bestanden schoon en consistent.
- YAML Validator — Vang syntaxfouten op voordat ze je deployment kapotmaken.
- YAML naar JSON Converter — Converteer tussen formaten wanneer je moet samenwerken met JSON-only tools.
YAML heeft zijn eigenaardigheden, maar als je eenmaal gewend bent aan de indentatie-gebaseerde syntaxis, zul je waarderen hoeveel schoner je configuratiebestanden eruitzien vergeleken met het JSON-alternatief.