track
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.
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:
- 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 YAML
name: John Doe
age: 30
skills:
- Python
- YAML
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: user
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.
fruits:
- Apple
- Banana
- Cherry
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.
person:
name: Alice
details:
age: 25
city: London
Kommentarer
Kommentarer börjar med # och ignoreras av YAML-tolkar. Dessa kommentarer är enradiga.
# This is a comment
username: admin
password: secret
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.
literal: |
This is a
multi-line string.
folded: >
This is another
multi-line string.
Ovanstående förstås bäst genom att visa utdata.
- För
|(literal block):
This is a
multi-line string.
- För
>(folded block):
This is another multi-line string.
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:
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 tillåter explicita typdeklarationer med !!type när det behövs:
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
Eftersom YAML ofta används för strukturerad data stöder det:
- Listor (sekvenser):
fruits:
- Apple
- Banana
- Cherry
- Ordböcker (mappningar):
person:
name: Alice
age: 30
is_student: false
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.
defaults: &default_settings
retries: 3
timeout: 30
server1:
host: example.com
retries: *default_settings # Reuses the retries value from defaults
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_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
Så här ser den slutliga upplösta strukturen ut:
server1:
retries: 3
timeout: 30
host: example.com
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.
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
environment:
- NGINX_HOST=localhost
- NGINX_PORT=80
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:
user:
id: 123
name: "John Doe"
email: "johndoe@example.com"
active: true
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: 8080
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: 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‑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: secret
Så här kan du arbeta med din konfigurationsfil i Python:
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)
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:
- CLI‑verktyg: yamllint (Python-baserad linter)
- Onlinetjänster: YAML Lint, JSON Formatter’s YAML Validator
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:
- 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!"
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:
- Lär dig hur YAML används i CI/CD‑arbetsflöden med den här CI/CD for Machine Learning-kursen.
- Utforska hur API:er använder YAML i sina specifikationer i den här Introduction to APIs in Python-kursen.
- Fördjupa dig i containerisering och infrastruktur-automatisering i det här Containerization and Virtualization-spåret.
FAQs
Är YAML universellt?
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.