Leerpad
Door de jaren heen heb ik met talloze configuratiebestanden gewerkt, en YAML springt eruit door zijn eenvoud en leesbaarheid. Of je nu workflows in Kubernetes opzet, services in Docker definieert of API-verzoeken structureert, YAML maakt complexe configuraties beter beheersbaar. De strakke, op inspringing gebaseerde structuur haalt de ruis weg van formats zoals XML, terwijl het toch flexibel blijft.
In deze gids neem ik je mee door de syntaxis, structuur, geavanceerde functies en best practices van YAML, zodat je er vol vertrouwen mee kunt werken.
Wat is YAML?
YAML (Yet Another Markup Language / YAML Ain’t Markup Language) is een gegevensserialisatieformaat dat leesbaarheid en gebruiksgemak vooropstelt. Terwijl XML werkt met een mix van HTML-achtige geneste tags en JSON met accolades en aanhalingstekens (zoals Python-dictionaries), is YAML compacter en gebruikt het inspringing om structuur te definiëren, wat het mensvriendelijker maakt.
YAML ondersteunt verschillende gegevenstypen, waaronder scalars (strings, getallen, booleans), sequences (lijsten) en mappings (sleutel-waardeparen). Het wordt veel gebruikt in configuratiebestanden, infrastructuurautomatisering en gegevensuitwisseling, vooral in tools als Kubernetes, Docker en Ansible.
Daarnaast is YAML een superset van JSON, wat betekent dat geldige JSON-bestanden als YAML geparsed kunnen worden. YAML-bestanden hebben doorgaans de extensie .yaml of .yml.
Je kunt meer over YAML leren op de website!
YAML-syntaxis en -structuur
In dit onderdeel behandelen we de basisprincipes van de YAML-syntaxis, waaronder sleutel-waardeparen, lijsten, geneste data en commentaar.
Basisregels voor de syntaxis
Er zijn een paar basisregels voor YAML:
- Spatie-inspringing geeft structuur aan, vermijd dus tabs!
- Sleutel-waardeparen volgen de structuur
key: value, vergelijkbaar met andere talen. - Een streepje aan het begin van regels geeft een lijst aan.
- Met
#maak je commentaarregels.
# Here is an example of YAML
name: John Doe
age: 30
skills:
- Python
- YAML
Sleutel-waardeparen
YAML stelt data voor als sleutel-waardeparen, vergelijkbaar met dictionaries in Python. Dit geeft vaak informatie door aan verschillende configuratiebestanden en instellingen. Je hoeft strings of sleutels niet te omgeven met aanhalingstekens; schrijf simpelweg de benodigde sleutel en waarde:
location: New York
country: USA
security-level: user
Lijsten in YAML
Lijsten worden weergegeven met streepjes (-). Hiermee kun je meerdere objecten onder één sleutel groeperen. Dit wordt visueel vaak als opsommingstekens getoond door markup-editors.
fruits:
- Apple
- Banana
- Cherry
Geneste data
Met geneste structuren kun je hiërarchische data weergeven via inspringing. Zie het als geneste dictionaries. Door in te springen geef je aan welke sleutels subsets van andere sleutels zijn.
person:
name: Alice
details:
age: 25
city: London
Commentaar
Commentaar begint met # en wordt genegeerd door YAML-parsers. Dit zijn enkelregelige opmerkingen.
# This is a comment
username: admin
password: secret
Geavanceerde YAML-functies
YAML bevat krachtige functies zoals meerregelige strings, gegevenstypen en anchors, die documenten efficiënter en gestructureerder maken. In dit onderdeel verkennen we deze mogelijkheden met praktische voorbeelden.
Meerregelige strings
YAML ondersteunt meerregelige strings met | (letterlijk blok) of > (gevouwen blok).
- Het letterlijke blok
|maakt een nieuwe regel\nbij elke regeleinde. - Het gevouwen blok
>maakt alleen een nieuwe regel bij opeenvolgende regeleinden.
literal: |
This is a
multi-line string.
folded: >
This is another
multi-line string.
Het bovenstaande wordt duidelijker met de output erbij.
- Voor het
|(letterlijk blok):
This is a
multi-line string.
- Voor het
>(gevouwen blok):
This is another multi-line string.
Gegevenstypen in YAML
YAML ondersteunt verschillende gegevenstypen, waaronder strings, getallen, booleans en null-waarden. Het detecteert typen automatisch op basis van de opmaak, maar staat ook expliciete typedefinities toe.
Het volgende voorbeeld toont het gebruik van basisgegevenstypen in YAML:
string_implicit: Hello, YAML! # No quotes needed unless necessary
string_double_quoted: "Supports escape sequences like \n and \t"
string_single_quoted: 'Raw text, no escape sequences'
integer: 42 # Whole numbers
float: 3.14 # Numbers with decimals
boolean_true: true
boolean_false: false
null_value: null # Null value
null_tilde: ~ # Another way to represent null
YAML staat expliciete typedefinities toe met !!type wanneer dat nodig is:
explicit_string: !!str 123 # Forces 123 to be a string
explicit_integer: !!int "42" # Forces "42" to be an integer
explicit_float: !!float "3.14" # Forces "3.14" to be a float
Omdat YAML vaak voor gestructureerde data wordt gebruikt, ondersteunt het:
- Lijsten (sequences):
fruits:
- Apple
- Banana
- Cherry
- Woordenboeken (mappings):
person:
name: Alice
age: 30
is_student: false
Anchors en aliassen
YAML laat je herbruikbare waarden definiëren met anchors (&) en deze later refereren met aliassen (*). Dit helpt redundantie in configuratiebestanden verminderen, waardoor ze overzichtelijker en makkelijker te onderhouden zijn.
defaults: &default_settings
retries: 3
timeout: 30
server1:
host: example.com
retries: *default_settings # Reuses the retries value from defaults
De syntaxis <<: maakt het mogelijk om sleutel-waardeparen van een anchor te mergen in een andere mapping. Als een sleutel in beide voorkomt, overschrijft de nieuwe waarde de oorspronkelijke.
defaults: &default_settings
retries: 3
timeout: 30
server1:
<<: *default_settings # Merges all key-value pairs from default_settings
host: example.com # This key is added to the merged data
Dit is de uiteindelijke, opgeloste structuur:
server1:
retries: 3
timeout: 30
host: example.com
Anchors en aliassen zijn vooral nuttig in grote configuratiebestanden waar waarden herhalen inefficiënt zou zijn. Ze helpen YAML-bestanden DRY te houden (Don’t Repeat Yourself) en maken updates eenvoudiger.
Veelvoorkomende use cases voor YAML
YAML wordt veel gebruikt in softwareontwikkeling, infrastructuurautomatisering en API-beheer. Door de mensvriendelijke syntaxis is het een voorkeursformaat voor configuratiebestanden, gegevensserialisatie en Infrastructure as Code (IaC). Laten we de meest gebruikelijke toepassingen verkennen.
Configuratiebestanden
YAML wordt veel gebruikt voor configuratie in applicaties zoals Docker Compose, Kubernetes en CI/CD-pijplijnen. Door de begrijpelijkheid kan iedereen eenvoudig Docker-YAML-setupbestanden oppakken en snappen wat er gebeurt.
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
environment:
- NGINX_HOST=localhost
- NGINX_PORT=80
De leesbaarheid van YAML en de ondersteuning voor anchors en aliassen helpen herhaling te verminderen, waardoor het onderhoudsvriendelijker is dan JSON of XML.
Leer meer over YAML en het gebruik in Docker in deze intermediate Docker-cursus.
Serialisatie en overdracht van data
YAML wordt gebruikt om data te serialiseren voor API’s en configuratiebeheertools, door complexe datastructuren om te zetten naar een mensleesbaar formaat dat ook eenvoudig door machines te parsen is.
Bijvoorbeeld, een API-request body geformatteerd in YAML:
user:
id: 123
name: "John Doe"
email: "johndoe@example.com"
active: true
De op inspringing gebaseerde structuur van YAML haalt overbodige syntaxis weg, waardoor het lichter, leesbaarder en makkelijker te wijzigen is dan JSON.
Infrastructure as Code (IaC)
Configuratiebeheertools zoals Ansible en Kubernetes gebruiken YAML om systeemtoestanden te definiëren, processen te automatiseren en consistentie over omgevingen te waarborgen.
- In Ansible wordt YAML gebruikt voor het schrijven van playbooks die systeemtoestanden, taken en afhankelijkheden definiëren, zodat infrastructuurcomponenten consistent geconfigureerd zijn.
- Kubernetes gebruikt YAML-manifests om resources zoals pods, services en deployments te definiëren, waardoor geautomatiseerde orkestratie van containerized applicaties mogelijk is.
Hier is een voorbeeld van een Kubernetes Pod-configuratie:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app-container
image: my-app:latest
ports:
- containerPort: 8080
Leer meer over hoe YAML wordt gebruikt in Kubernetes in deze Introduction to Kubernetes-cursus.
API-documentatie
API-specificaties zoals OpenAPI en Swagger gebruiken YAML om endpoints en datastructuren op een leesbare manier te definiëren. YAML wordt gebruikt om API-methoden, requestparameters, responseformaten en authenticatiemethoden te beschrijven.
Hier is een voorbeeld van een OpenAPI-specificatie in YAML:
openapi: 3.0.0
info:
title: User API
version: "1.0"
paths:
/users:
get:
summary: Retrieve a list of users
responses:
"200":
description: Successful response
OpenAPI-specificaties gebruiken bijvoorbeeld YAML om RESTful API’s te documenteren. Zo bieden ze een duidelijke blauwdruk voor het genereren van client-SDK’s, interactieve API-documentatie en geautomatiseerd testen. Dit gestructureerde formaat waarborgt consistentie tussen API-implementaties.
Werken met YAML-bestanden
YAML wordt veel gebruikt voor configuratiebestanden, automatisering en gegevensserialisatie, maar omdat het op inspringing vertrouwt, is correcte opmaak cruciaal. Zo lees, schrijf, valideer en bewerk je YAML effectief.
YAML lezen en schrijven in Python
De Python-bibliotheek PyYAML kan YAML parsen en genereren.
Stel, je hebt het volgende configuratie-YAML-bestand:
database:
host: localhost
port: 5432
user: admin
password: secret
Zo kun je in Python met je configuratiebestand werken:
import yaml
# Load YAML data
with open("config.yaml", "r") as file:
data = yaml.safe_load(file) # safe_load prevents arbitrary code execution
# Modify data (optional)
data["database"]["user"] = "new_user"
# Write YAML data
with open("output.yaml", "w") as file:
yaml.dump(data, file, default_flow_style=False)
Als je geïnteresseerd bent in werken met JSON-data in Python, bekijk dan de comprehensieve Python JSON-tutorial.
YAML-bestanden valideren
Om de juiste structuur te waarborgen, kun je tools gebruiken om tabs in plaats van spaties op te sporen of gekke issues zoals herhaalde tekens, syntaxisproblemen en spaties aan het einde van regels.
Dit zijn enkele populaire YAML-validators:
- CLI-tool: yamllint (Python-gebaseerde linter)
- Online validators: YAML Lint, JSON Formatter’s YAML Validator
YAML bewerken
Je kunt YAML in elke teksteditor schrijven en bewerken, maar lintingtools en syntaxiskleuring verbeteren de leesbaarheid.
Een paar van mijn favoriete editors:
- VS Code (met YAML-plugins)
- PyCharm (ingebouwde ondersteuning)
- Sublime Text (met YAML-syntaxiskleuring)
Veelgemaakte fouten om te vermijden in YAML
Ondanks de eenvoud kun je bij YAML nog steeds makkelijk problemen en typfouten krijgen. In dit onderdeel bespreken we deze fouten en geven we best practices voor het schrijven van schone en correcte bestanden. Dit is ook waarom ik een linter of teksteditor aanbeveel!
Tabs en spaties door elkaar gebruiken
YAML vertrouwt op spaties voor inspringing—gebruik nooit spaties en tabs door elkaar. Tabs breken je YAML-script simpelweg. Dit is een bewuste keuze, omdat verschillende systemen tabs anders lezen, en daarom zijn spaties de voorkeursoptie om de impact te minimaliseren.
Onjuiste inspringing
Zorg voor consistente inspringing om parsefouten te voorkomen. Omdat inspringing de enige manier van YAML is om hiërarchie aan te duiden, kan onjuiste parsing problemen met je code veroorzaken. Je kunt een key: value-paar makkelijk op de verkeerde plek laten belanden, dus let goed op de inspringing!
Aanhalingstekens vergeten bij speciale tekens
Gebruik aanhalingstekens voor strings met speciale tekens of spaties. Dingen als backslashes, komma’s, uitroeptekens, enzovoort hebben aanhalingstekens nodig om als strings te worden gelezen.
path: "/home/user/documents"
message: "Hello, World!"
Met de juiste validatie, gestructureerd bewerken en Python’s PyYAML kun je efficiënt werken met YAML-bestanden en veelvoorkomende valkuilen vermijden.
Conclusie
YAML is een krachtig maar eenvoudig formaat dat veel wordt gebruikt voor configuratie, gegevensserialisatie en infrastructuurautomatisering. Door de syntaxis, structuur en best practices te begrijpen, kun je efficiënt met YAML werken in diverse toepassingen.
Wil je YAML in praktijkscenario’s toepassen?
- Leer hoe YAML wordt gebruikt in CI/CD-workflows met deze CI/CD for Machine Learning-cursus.
- Ontdek hoe API’s YAML gebruiken in hun specificaties in deze Introduction to APIs in Python-cursus.
- Duik dieper in containerization en infrastructuurautomatisering in dit Containerization and Virtualization-track.
FAQs
Is YAML universeel?
Zolang de gegevensbron of het doel YAML kan lezen, is het een haalbare en nuttige manier om data te serialiseren en te transporteren. Zorg ervoor dat je data verstuurt naar een doel dat YAML kan verwerken.
Is YAML veilig? Kunnen YAML-bestanden beveiligingsrisico’s introduceren?
YAML zelf is slechts een dataformaat, maar beveiligingsrisico’s ontstaan bij het parsen van onbetrouwbare YAML-bestanden. De standaardmethode yaml.load() in Python’s PyYAML kan willekeurige code uitvoeren die in YAML is ingebed, wat riskant is. Gebruik in plaats daarvan altijd yaml.safe_load() om onbedoelde uitvoering van kwaadaardige code te voorkomen. Zorg er bij het gebruik van YAML in applicaties ook voor dat je strikte schemavalidatie toepast om kwetsbaarheden te vermijden.
Kan YAML omgevingsvariabelen ondersteunen?
Ja! Hoewel YAML zelf geen omgevingsvariabelen verwerkt, staan veel tools (zoals Docker Compose en Kubernetes) toe dat je binnen YAML-bestanden naar omgevingsvariabelen verwijst.
Hoe ga je om met commentaar in YAML?
YAML ondersteunt enkelregelige opmerkingen met het #-symbool, maar ondersteunt geen meerregelige opmerkingen. Als je meerregelige opmerkingen nodig hebt, is een veelgebruikte workaround een dummy-sleutel zoals _comment te gebruiken. Dit is echter slechts een conventie en wordt niet genegeerd door YAML-parsers, tenzij je applicatie dit specifiek wegfiltert.
Ik ben een data scientist met ervaring in ruimtelijke analyse, machine learning en datapijplijnen. Ik heb gewerkt met GCP, Hadoop, Hive, Snowflake, Airflow en andere data science- en engineeringprocessen.

