Vad är YAML? Förstå grunderna, syntaxen och användningsområdena
YAML är ett enkelt men kraftfullt format för konfigurationer, automatisering och dataserialisering. Lär dig hur det fungerar med exempel från verkligheten!
Genom åren har jag arbetat med otaliga konfigurationsfiler, och YAML har utmärkt sig för sin enkelhet och läsbarhet. Oavsett om jag sätter upp arbetsflöden i Kubernetes, definierar tjänster i Docker eller strukturerar API-förfrågningar, gör YAML komplexa konfigurationer mer hanterbara. Dess rena, indenteringsbaserade struktur eliminerar bruset i format som XML samtidigt som den förblir flexibel.
I den här guiden går jag igenom YAML:s syntax, struktur, avancerade funktioner och bästa praxis så att du kan arbeta med det med självförtroende.
Vad är YAML?
YAML (Yet Another Markup Language / YAML Ain’t Markup Language) är ett dataserialiseringsformat som prioriterar läsbarhet och enkel användning. Medan XML använder en blandning av HTML-liknande nästlade taggar och JSON använder klamrar och citattecken, ungefär som Pythons ordböcker, är YAML mer koncist och använder indentering för att definiera struktur, vilket gör det mer människovänligt.
YAML stöder olika datatyper, inklusive skalärer (strängar, tal, booleska värden), sekvenser (listor) och mappningar (nyckel–värde-par). Det används i stor utsträckning i konfigurationsfiler, infrastruktur-automatisering och datautbyte, särskilt i verktyg som Kubernetes, Docker och Ansible.
Dessutom är YAML en superset av JSON, vilket betyder att giltiga JSON-filer kan tolkas som YAML. YAML-filer har vanligtvis filändelsen .yaml eller .yml.
Det här avsnittet går igenom de grundläggande principerna för YAML-syntax, inklusive nyckel–värde-par, listor, nästlad data och kommentarer.
Grundläggande syntaxregler
Det finns några grundläggande syntaktiska regler för YAML:
Blankstegsindentering anger struktur, så undvik tabbtecken!
Nyckel–värde-par följer strukturen key: value, likt andra språk.
Bindestreck i början av rader anger en lista.
Att använda # skapar kommentarrader.
# Here is an example of YAMLname: John Doe
age:30skills:- Python
- YAMLDrivs av
Nyckel–värde-par
YAML representerar data som nyckel–värde-par, ungefär som ordböcker i Python. Detta används ofta för att ange information till olika konfigurationsfiler och inställningar. Det finns inget behov av att omsluta strängar eller nycklar med citattecken; skriv helt enkelt de nycklar och värden som behövs:
location: New York
country: USA
security-level: userDrivs av
Listor i YAML
Listor representeras med bindestreck (-). Detta låter dig lista flera objekt under en och samma nyckel. Detta visas ofta visuellt som punkter när det läses av Markup‑redigerare.
Nästlade strukturer möjliggör hierarkisk datarepresentation med hjälp av indentering. Tänk på dem som nästlade ordböcker. Genom att använda indentering anger du vilka nycklar som är delmängder av andra.
person:name: Alice
details:age:25city: LondonDrivs av
Kommentarer
Kommentarer börjar med # och ignoreras av YAML-tolkar. Dessa kommentarer är enradiga.
# This is a commentusername: admin
password: secretDrivs av
Avancerade YAML-funktioner
YAML innehåller kraftfulla funktioner som flerradiga strängar, datatyper samt ankare som gör dokument mer effektiva och strukturerade. I det här avsnittet utforskar vi dessa möjligheter med praktiska exempel.
Flerradiga strängar
YAML stöder flerradiga strängar med | (literal block) eller > (folded block).
| literal block skapar en ny rad \n för varje radbrytning.
> folded block skapar bara en ny rad vid flera på varandra följande radbrytningar.
literal:|
This is a
multi-line string.folded:>
This is another
multi-line string.Drivs av
YAML stöder olika datatyper, inklusive strängar, tal, booleska värden och null-värden. Det identifierar automatiskt typer baserat på formatering men tillåter också explicita typdefinitioner.
Följande exempel visar användningen av grundläggande datatyper i YAML:
string_implicit: Hello, YAML!# No quotes needed unless necessarystring_double_quoted:"Supports escape sequences like \n and \t"string_single_quoted:'Raw text, no escape sequences'integer:42# Whole numbersfloat:3.14# Numbers with decimalsboolean_true:trueboolean_false:falsenull_value:null# Null valuenull_tilde:~# Another way to represent nullDrivs av
YAML tillåter explicita typdeklarationer med !!type när det behövs:
explicit_string:!!str123# Forces 123 to be a stringexplicit_integer:!!int"42"# Forces "42" to be an integerexplicit_float:!!float"3.14"# Forces "3.14" to be a floatDrivs av
Eftersom YAML ofta används för strukturerad data stöder det:
YAML låter dig definiera återanvändbara värden med ankare (&) och referera till dem senare med alias (*). Detta hjälper till att minska redundans i konfigurationsfiler, vilket gör dem renare och enklare att underhålla.
defaults:&default_settingsretries:3timeout:30server1:host: example.com
retries:*default_settings# Reuses the retries value from defaultsDrivs av
Syntaxen <<: tillåter att slå samman nyckel–värde-par från ett ankare in i en annan mappning. Om en nyckel finns i båda, åsidosätter det nya värdet det ursprungliga.
defaults:&default_settingsretries:3timeout:30server1:<<:*default_settings# Merges all key-value pairs from default_settingshost: example.com # This key is added to the merged dataDrivs av
Så här ser den slutliga upplösta strukturen ut:
server1:
retries: 3
timeout: 30
host: example.comDrivs av
Ankare och alias är särskilt användbara i stora konfigurationsfiler där det vore ineffektivt att upprepa värden manuellt. De hjälper till att hålla YAML-filer DRY (Don't Repeat Yourself) och gör uppdateringar enklare.
Vanliga användningsområden för YAML
YAML används i stor utsträckning inom programvaruutveckling, infrastruktur-automatisering och API-hantering. Dess människoläsbara syntax gör det till ett föredraget format för konfigurationsfiler, dataserialisering och Infrastructure as Code (IaC). Låt oss utforska dess vanligaste tillämpningar.
Konfigurationsfiler
YAML används i stor utsträckning för konfiguration i applikationer som Docker Compose, Kubernetes och CI/CD-pipelines. Dess lättförståelighet gör det enkelt för vem som helst att ta del av Dockers YAML‑setupfiler och förstå vad som händer.
YAML:s läsbarhet och stöd för ankare och alias hjälper till att minska upprepning, vilket gör det mer lättskött än JSON eller XML.
Lär dig mer om YAML och dess användning i Docker i den här mellannivå-kursen Docker.
Dataserialisering och överföring
YAML används för att serialisera data för API:er och konfigurationshanteringsverktyg genom att konvertera komplexa datastrukturer till ett människoläsbart format som enkelt kan tolkas av maskiner.
Till exempel en API‑förfrågningskropp formaterad i YAML:
YAML:s indenteringsbaserade struktur eliminerar onödig syntax, vilket gör det lättviktigt, läsbart och enklare att ändra jämfört med JSON.
Infrastructure as Code (IaC)
Konfigurationshanteringsverktyg som Ansible och Kubernetes utnyttjar YAML för att definiera systemtillstånd, automatisera processer och säkerställa konsekvens mellan miljöer.
I Ansible används YAML för att skriva playbooks som definierar systemtillstånd, uppgifter och beroenden, vilket säkerställer att infrastrukturkomponenter konfigureras konsekvent.
Kubernetes använder YAML‑manifest för att definiera resurser som pods, tjänster och distributioner, vilket möjliggör automatiserad orkestrering av containeriserade applikationer.
Här är ett exempel på en Kubernetes Pod‑konfiguration:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app-container
image: my-app:latest
ports:
- containerPort: 8080Drivs av
API-specifikationer somOpenAPI och Swagger använder YAML för att definiera ändpunkter och datastrukturer på ett lättläst sätt. YAML används för att beskriva API‑metoder, förfrågningsparametrar, svarsformat och autentiseringsmetoder.
Här är ett exempel på en OpenAPI-specifikation i 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 responseDrivs av
OpenAPI‑specifikationer använder till exempel YAML för att dokumentera RESTful API:er. Detta låter dem tillhandahålla en tydlig ritning för att generera klient‑SDK:er, interaktiv API‑dokumentation och automatiserade tester. Detta strukturerade format säkerställer konsekvens mellan API-implementationer.
Att arbeta med YAML-filer
YAML används ofta för konfigurationsfiler, automatisering och dataserialisering, men eftersom det bygger på indentering är korrekt formatering avgörande. Så här kan du läsa, skriva, validera och redigera YAML effektivt.
Läsa och skriva YAML i Python
Pythons PyYAML-bibliotek kan tolka och generera YAML.
Föreställ dig att du har följande YAML‑konfigurationsfil:
database:
host: localhost
port: 5432
user: admin
password: secretDrivs av
Så här kan du arbeta med din konfigurationsfil i Python:
import yaml
# Load YAML datawithopen("config.yaml","r")asfile:
data = yaml.safe_load(file)# safe_load prevents arbitrary code execution# Modify data (optional)
data["database"]["user"]="new_user"# Write YAML datawithopen("output.yaml","w")asfile:
yaml.dump(data,file, default_flow_style=False)Drivs av
Om du är intresserad av att arbeta med JSON‑data i Python, kolla in den omfattande Python JSON-guiden.
Validera YAML-filer
För att säkerställa korrekt struktur kan du använda verktyg för att upptäcka tabbtecken i stället för blanksteg eller konstiga problem som upprepade tecken, syntaxfel och avslutande blanksteg.
Du kan skriva och redigera YAML i vilken textredigerare som helst, men linterverktyg och syntaxmarkering förbättrar läsbarheten.
Några av mina favoritredigerare:
VS Code (med YAML‑insticksmoduler)
PyCharm (inbyggt stöd)
Sublime Text (med YAML‑syntaxmarkering)
Vanliga misstag att undvika i YAML
Trots sin enkelhet kan du ändå lätt få problem och skrivfel när du arbetar med YAML. Det här avsnittet tar upp dessa misstag och ger bästa praxis för att skriva rena och korrekta filer. Det är också därför jag rekommenderar att använda en linter eller textredigerare!
Blanda tabbar och blanksteg
YAML bygger på blanksteg för indentering — blanda aldrig blanksteg och tabbar. Tabbar kommer helt enkelt att förstöra ditt YAML‑skript. Detta är faktiskt ett medvetet beslut, eftersom olika system läser tabbar olika och därför, för att minimera påverkan, är blanksteg det föredragna valet.
Felaktig indentering
Säkerställ konsekvent indentering för att undvika tolkningsfel. Eftersom indentering är YAML:s enda metod för att ange hierarki kan felaktig tolkning orsaka problem med din kod. Du kan lätt råka stoppa undan ett key: value-par på fel plats, så håll ett öga på indenteringen!
Glömma citattecken för specialtecken
Använd citattecken för strängar som innehåller specialtecken eller mellanslag. Saker som omvänt snedstreck, kommatecken, utropstecken och så vidare behöver citattecken för att läsas som strängar.
path: "/home/user/documents"
message: "Hello, World!"Drivs av
Genom att använda korrekt validering, strukturerad redigering och Pythons PyYAML kan du arbeta effektivt med YAML‑filer samtidigt som du undviker vanliga fallgropar.
Slutsats
YAML är ett kraftfullt men enkelt format som används i stor utsträckning för konfiguration, dataserialisering och infrastruktur-automatisering. Genom att förstå dess syntax, struktur och bästa praxis kan du arbeta effektivt med YAML i olika applikationer.
Så länge datakällan eller målet kan läsa YAML är det en gångbar och användbar metod för att serialisera och transportera data. Se till att du skickar data till ett mål som kan bearbeta YAML.
Är YAML säkert? Kan YAML-filer innebära säkerhetsrisker?⌄
YAML i sig är bara ett dataformat, men säkerhetsrisker uppstår när man tolkar opålitliga YAML‑filer. Standardmetoden yaml.load() i Pythons PyYAML kan köra godtycklig kod inbäddad i YAML, vilket gör den riskabel. Använd i stället alltid yaml.safe_load() för att förhindra oavsiktlig körning av skadlig kod. Säkerställ på liknande sätt strikt schemavalidering när du använder YAML i applikationer för att undvika säkerhetssårbarheter.
Kan YAML hantera miljövariabler?⌄
Ja! Även om YAML i sig inte direkt hanterar miljövariabler tillåter många verktyg (som Docker Compose och Kubernetes) att man refererar till miljövariabler i YAML‑filer.
Hur hanterar man kommentarer i YAML?⌄
YAML stöder enradiga kommentarer med symbolen #, men det stöder inte flerradiga kommentarer. Om du behöver flerradiga kommentarer är en vanlig lösning att använda en skennyckel som _comment. Detta är dock bara en konvention och kommer inte att ignoreras av YAML‑tolkar om inte din applikation specifikt filtrerar bort den.
Få efterfrågade färdigheter för att effektivt ta in, rensa och hantera data samt schemalägga och övervaka pipelines, så att du sticker ut inom data engineering.
Genom åren har jag arbetat med otaliga konfigurationsfiler, och YAML har utmärkt sig för sin enkelhet och läsbarhet. Oavsett om jag sätter upp arbetsflöden i Kubernetes, definierar tjänster i Docker eller strukturerar API-förfrågningar, gör YAML komplexa konfigurationer mer hanterbara. Dess rena, indenteringsbaserade struktur eliminerar bruset i format som XML samtidigt som den förblir flexibel.
I den här guiden går jag igenom YAML:s syntax, struktur, avancerade funktioner och bästa praxis så att du kan arbeta med det med självförtroende.
Vad är YAML?
YAML (Yet Another Markup Language / YAML Ain’t Markup Language) är ett dataserialiseringsformat som prioriterar läsbarhet och enkel användning. Medan XML använder en blandning av HTML-liknande nästlade taggar och JSON använder klamrar och citattecken, ungefär som Pythons ordböcker, är YAML mer koncist och använder indentering för att definiera struktur, vilket gör det mer människovänligt.
YAML stöder olika datatyper, inklusive skalärer (strängar, tal, booleska värden), sekvenser (listor) och mappningar (nyckel–värde-par). Det används i stor utsträckning i konfigurationsfiler, infrastruktur-automatisering och datautbyte, särskilt i verktyg som Kubernetes, Docker och Ansible.
Dessutom är YAML en superset av JSON, vilket betyder att giltiga JSON-filer kan tolkas som YAML. YAML-filer har vanligtvis filändelsen
.yamleller.yml.Du kan läsa mer om YAML på dess webbplats också!
YAML-syntax och struktur
Det här avsnittet går igenom de grundläggande principerna för YAML-syntax, inklusive nyckel–värde-par, listor, nästlad data och kommentarer.
Grundläggande syntaxregler
Det finns några grundläggande syntaktiska regler för YAML:
key: value, likt andra språk.#skapar kommentarrader.Nyckel–värde-par
YAML representerar data som nyckel–värde-par, ungefär som ordböcker i Python. Detta används ofta för att ange information till olika konfigurationsfiler och inställningar. Det finns inget behov av att omsluta strängar eller nycklar med citattecken; skriv helt enkelt de nycklar och värden som behövs:
Listor i YAML
Listor representeras med bindestreck (
-). Detta låter dig lista flera objekt under en och samma nyckel. Detta visas ofta visuellt som punkter när det läses av Markup‑redigerare.Nästlad data
Nästlade strukturer möjliggör hierarkisk datarepresentation med hjälp av indentering. Tänk på dem som nästlade ordböcker. Genom att använda indentering anger du vilka nycklar som är delmängder av andra.
Kommentarer
Kommentarer börjar med
#och ignoreras av YAML-tolkar. Dessa kommentarer är enradiga.Avancerade YAML-funktioner
YAML innehåller kraftfulla funktioner som flerradiga strängar, datatyper samt ankare som gör dokument mer effektiva och strukturerade. I det här avsnittet utforskar vi dessa möjligheter med praktiska exempel.
Flerradiga strängar
YAML stöder flerradiga strängar med
|(literal block) eller>(folded block).|literal block skapar en ny rad\nför varje radbrytning.>folded block skapar bara en ny rad vid flera på varandra följande radbrytningar.Ovanstående förstås bäst genom att visa utdata.
|(literal block):>(folded block):Datatyper i YAML
YAML stöder olika datatyper, inklusive strängar, tal, booleska värden och null-värden. Det identifierar automatiskt typer baserat på formatering men tillåter också explicita typdefinitioner.
Följande exempel visar användningen av grundläggande datatyper i YAML:
YAML tillåter explicita typdeklarationer med
!!typenär det behövs:Eftersom YAML ofta används för strukturerad data stöder det:
Ankare och alias
YAML låter dig definiera återanvändbara värden med ankare (
&) och referera till dem senare med alias (*). Detta hjälper till att minska redundans i konfigurationsfiler, vilket gör dem renare och enklare att underhålla.Syntaxen
<<:tillåter att slå samman nyckel–värde-par från ett ankare in i en annan mappning. Om en nyckel finns i båda, åsidosätter det nya värdet det ursprungliga.Så här ser den slutliga upplösta strukturen ut:
Ankare och alias är särskilt användbara i stora konfigurationsfiler där det vore ineffektivt att upprepa värden manuellt. De hjälper till att hålla YAML-filer DRY (Don't Repeat Yourself) och gör uppdateringar enklare.
Vanliga användningsområden för YAML
YAML används i stor utsträckning inom programvaruutveckling, infrastruktur-automatisering och API-hantering. Dess människoläsbara syntax gör det till ett föredraget format för konfigurationsfiler, dataserialisering och Infrastructure as Code (IaC). Låt oss utforska dess vanligaste tillämpningar.
Konfigurationsfiler
YAML används i stor utsträckning för konfiguration i applikationer som Docker Compose, Kubernetes och CI/CD-pipelines. Dess lättförståelighet gör det enkelt för vem som helst att ta del av Dockers YAML‑setupfiler och förstå vad som händer.
YAML:s läsbarhet och stöd för ankare och alias hjälper till att minska upprepning, vilket gör det mer lättskött än JSON eller XML.
Lär dig mer om YAML och dess användning i Docker i den här mellannivå-kursen Docker.
Dataserialisering och överföring
YAML används för att serialisera data för API:er och konfigurationshanteringsverktyg genom att konvertera komplexa datastrukturer till ett människoläsbart format som enkelt kan tolkas av maskiner.
Till exempel en API‑förfrågningskropp formaterad i YAML:
YAML:s indenteringsbaserade struktur eliminerar onödig syntax, vilket gör det lättviktigt, läsbart och enklare att ändra jämfört med JSON.
Infrastructure as Code (IaC)
Konfigurationshanteringsverktyg som Ansible och Kubernetes utnyttjar YAML för att definiera systemtillstånd, automatisera processer och säkerställa konsekvens mellan miljöer.
Här är ett exempel på en Kubernetes Pod‑konfiguration:
Lär dig mer om hur YAML används i Kubernetes i den här kursen Introduction to Kubernetes.
API-dokumentation
API-specifikationer som OpenAPI och Swagger använder YAML för att definiera ändpunkter och datastrukturer på ett lättläst sätt. YAML används för att beskriva API‑metoder, förfrågningsparametrar, svarsformat och autentiseringsmetoder.
Här är ett exempel på en OpenAPI-specifikation i YAML:
OpenAPI‑specifikationer använder till exempel YAML för att dokumentera RESTful API:er. Detta låter dem tillhandahålla en tydlig ritning för att generera klient‑SDK:er, interaktiv API‑dokumentation och automatiserade tester. Detta strukturerade format säkerställer konsekvens mellan API-implementationer.
Att arbeta med YAML-filer
YAML används ofta för konfigurationsfiler, automatisering och dataserialisering, men eftersom det bygger på indentering är korrekt formatering avgörande. Så här kan du läsa, skriva, validera och redigera YAML effektivt.
Läsa och skriva YAML i Python
Pythons
PyYAML-bibliotek kan tolka och generera YAML.Föreställ dig att du har följande YAML‑konfigurationsfil:
Så här kan du arbeta med din konfigurationsfil i Python:
Om du är intresserad av att arbeta med JSON‑data i Python, kolla in den omfattande Python JSON-guiden.
Validera YAML-filer
För att säkerställa korrekt struktur kan du använda verktyg för att upptäcka tabbtecken i stället för blanksteg eller konstiga problem som upprepade tecken, syntaxfel och avslutande blanksteg.
Här är några populära YAML‑validatorer:
Redigera YAML
Du kan skriva och redigera YAML i vilken textredigerare som helst, men linterverktyg och syntaxmarkering förbättrar läsbarheten.
Några av mina favoritredigerare:
Vanliga misstag att undvika i YAML
Trots sin enkelhet kan du ändå lätt få problem och skrivfel när du arbetar med YAML. Det här avsnittet tar upp dessa misstag och ger bästa praxis för att skriva rena och korrekta filer. Det är också därför jag rekommenderar att använda en linter eller textredigerare!
Blanda tabbar och blanksteg
YAML bygger på blanksteg för indentering — blanda aldrig blanksteg och tabbar. Tabbar kommer helt enkelt att förstöra ditt YAML‑skript. Detta är faktiskt ett medvetet beslut, eftersom olika system läser tabbar olika och därför, för att minimera påverkan, är blanksteg det föredragna valet.
Felaktig indentering
Säkerställ konsekvent indentering för att undvika tolkningsfel. Eftersom indentering är YAML:s enda metod för att ange hierarki kan felaktig tolkning orsaka problem med din kod. Du kan lätt råka stoppa undan ett
key: value-par på fel plats, så håll ett öga på indenteringen!Glömma citattecken för specialtecken
Använd citattecken för strängar som innehåller specialtecken eller mellanslag. Saker som omvänt snedstreck, kommatecken, utropstecken och så vidare behöver citattecken för att läsas som strängar.
Genom att använda korrekt validering, strukturerad redigering och Pythons PyYAML kan du arbeta effektivt med YAML‑filer samtidigt som du undviker vanliga fallgropar.
Slutsats
YAML är ett kraftfullt men enkelt format som används i stor utsträckning för konfiguration, dataserialisering och infrastruktur-automatisering. Genom att förstå dess syntax, struktur och bästa praxis kan du arbeta effektivt med YAML i olika applikationer.
Om du vill tillämpa YAML i verkliga scenarier: