Sari la conținutul principal

Ce este YAML? Înțelegerea bazelor, a sintaxei și a cazurilor de utilizare

YAML este un format simplu, dar puternic, pentru configurații, automatizare și serializarea datelor. Învață cum funcționează cu exemple din lumea reală!
Actualizat 31 aug. 2026  · 14 min. citire

Explorează cu AI

ChatGPTClaudePerplexity

De-a lungul anilor, am lucrat cu nenumărate fișiere de configurare, iar YAML s-a remarcat prin simplitatea și lizibilitatea sa. Fie că setezi fluxuri de lucru în Kubernetes, definești servicii în Docker sau structurezi cereri către API, YAML face configurațiile complexe mai ușor de gestionat. Structura sa curată, bazată pe indentare, elimină aglomerația formatelor precum XML, rămânând în același timp flexibilă.

În acest ghid, te voi conduce prin sintaxa, structura, funcțiile avansate și bunele practici YAML, ca să poți lucra cu încredere.

Ce este YAML?

YAML (Yet Another Markup Language / YAML Ain’t Markup Language) este un format de serializare a datelor care dă prioritate lizibilității și ușurinței de utilizare. În timp ce XML folosește un amestec de etichete încapsulate, asemănătoare HTML, iar JSON folosește acolade și ghilimele, la fel ca dicționarele din Python, YAML este mai concis și folosește indentarea pentru a defini structura, fiind mai prietenos pentru oameni.

YAML acceptă diverse tipuri de date, inclusiv scalare (șiruri, numere, valori boolean), secvențe (liste) și mapări (perechi cheie–valoare). Este folosit pe scară largă în fișiere de configurare, automatizarea infrastructurii și schimb de date, în special în instrumente precum Kubernetes, Docker și Ansible.

În plus, YAML este un superset al JSON, ceea ce înseamnă că fișierele JSON valide pot fi parcurse ca YAML. Fișierele YAML au de obicei extensia .yaml sau .yml.

Poți afla mai multe despre YAML și pe site-ul său!

Sintaxa și structura YAML

În această secțiune vom explora principiile de bază ale sintaxei YAML, inclusiv perechi cheie–valoare, liste, date imbricate și comentarii.

Reguli de bază ale sintaxei

Există câteva reguli sintactice de bază pentru YAML:

  • Indentarea cu spații denotă structura, deci evită tab-urile!
  • Perechile cheie–valoare urmează structura cheie: valoare, similar altor limbaje.
  • Folosirea cratimelor la începutul liniilor denotă o listă.
  • Folosirea # va crea linii de comentariu.
# Here is an example of YAML
name: John Doe
age: 30
skills:
  - Python
  - YAML

Perechi cheie–valoare

YAML reprezintă datele ca perechi cheie–valoare, similar dicționarelor din Python. Acest lucru denotă adesea informații oferite diferitelor fișiere de configurare și setări. Nu este nevoie să pui șirurile sau cheile între ghilimele; scrie pur și simplu cheia și valorile necesare:

location: New York
country: USA
security-level: user

Liste în YAML

Listele sunt reprezentate folosind cratime (-). Acest lucru îți permite să listezi mai multe obiecte sub o singură cheie. Adesea sunt redate vizual cu puncte când sunt citite de editorii de markup.

fruits:
  - Apple
  - Banana
  - Cherry

Date imbricate

Structurile imbricate permit reprezentarea ierarhică a datelor folosind indentarea. Gândește-te la ele ca la dicționare imbricate. Prin indentare, indici ce chei sunt subseturi ale altora.

person:
  name: Alice
  details:
    age: 25
    city: London

Comentarii

Comentariile încep cu # și sunt ignorate de parser-ele YAML. Aceste comentarii sunt pe o singură linie.

# This is a comment
username: admin
password: secret

Funcții avansate YAML

YAML include funcții puternice precum șiruri pe mai multe linii, tipuri de date și ancore, care fac documentele mai eficiente și mai structurate. În această secțiune, vom explora aceste capabilități cu exemple practice.

Șiruri pe mai multe linii

YAML acceptă șiruri pe mai multe linii folosind | (bloc literal) sau > (bloc pliat).

  • Blocul literal | va crea o linie nouă \n pentru fiecare întrerupere de linie.
  • Blocul pliat > va face o linie nouă doar pentru întreruperi de linie consecutive.
literal: |
  This is a
  multi-line string.

folded: >
  This is another
  multi-line string.

Cel mai bine se înțelege de mai sus arătând rezultatul.

  • Pentru | (blocul literal):
This is a
multi-line string.
  • Pentru > (blocul pliat):
This is another multi-line string.

Tipuri de date în YAML

YAML acceptă diverse tipuri de date, inclusiv șiruri, numere, valori boolean și valori nule. Detectează automat tipurile pe baza formatării, dar permite și definiții explicite de tip.

Următorul exemplu arată utilizarea tipurilor de bază în 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 permite declarații explicite de tip folosind !!type atunci când este nevoie:

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

Deoarece YAML este folosit adesea pentru date structurate, acceptă:

  • Liste (secvențe):
fruits:
  - Apple
  - Banana
  - Cherry
  • Dicționare (mapări):
person:
  name: Alice
  age: 30
  is_student: false

Ancore și aliasuri

YAML îți permite să definești valori reutilizabile folosind ancore (&) și să le faci referire ulterior folosind aliasuri (*). Acest lucru ajută la reducerea redundanței în fișierele de configurare, făcându-le mai curate și mai ușor de întreținut.

defaults: &default_settings
  retries: 3
  timeout: 30

server1:
  host: example.com
  retries: *default_settings  # Reuses the retries value from defaults

Sintaxa <<: permite îmbinarea perechilor cheie–valoare dintr-o ancoră într-o altă mapare. Dacă o cheie există în ambele, noua valoare o suprascrie pe cea inițială.

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

Aceasta este structura finală rezultată:

server1:
  retries: 3
  timeout: 30
  host: example.com

Ancorele și aliasurile sunt deosebit de utile în fișierele mari de configurare, unde repetarea valorilor manual ar fi ineficientă. Ele ajută la păstrarea fișierelor YAML DRY (Don't Repeat Yourself) și fac actualizările mai ușoare.

Cazuri de utilizare comune pentru YAML

YAML este folosit pe scară largă în dezvoltarea software, automatizarea infrastructurii și managementul API-urilor. Sintaxa sa ușor de citit îl face un format preferat pentru fișiere de configurare, serializarea datelor și Infrastructure as Code (IaC). Să explorăm cele mai comune aplicații.

Fișiere de configurare

YAML este folosit pe scară largă pentru configurare în aplicații precum Docker Compose, Kubernetes și pipeline-uri CI/CD. Ușurința de înțelegere îl face simplu pentru oricine să ia fișierele YAML de configurare Docker și să înțeleagă ce se întâmplă.

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
    environment:
      - NGINX_HOST=localhost
      - NGINX_PORT=80

Lizibilitatea YAML și suportul pentru ancore și aliasuri ajută la reducerea repetițiilor, făcându-l mai ușor de întreținut decât JSON sau XML.

Află mai multe despre YAML și utilizarea sa în Docker în acest curs de nivel intermediar Docker.

Serializare și transfer de date

YAML este folosit pentru a serializa date pentru API-uri și instrumente de management al configurațiilor, transformând structuri complexe de date într-un format ușor de citit de oameni și ușor de parsat de mașini.

De exemplu, un corp de cerere către un API formatat în YAML:

user:
  id: 123
  name: "John Doe"
  email: "johndoe@example.com"
  active: true

Structura YAML bazată pe indentare elimină sintaxa inutilă, făcându-l mai ușor, mai lizibil și mai simplu de modificat comparativ cu JSON.

Infrastructure as Code (IaC)

Instrumente de management al configurațiilor precum Ansible și Kubernetes folosesc YAML pentru a defini stările sistemului, a automatiza procese și a asigura consistența între medii.

  • În Ansible, YAML este folosit pentru a scrie playbook-uri care definesc stări de sistem, taskuri și dependențe, asigurând configurarea consecventă a componentelor infrastructurii.
  • Kubernetes utilizează manifeste YAML pentru a defini resurse precum pod-uri, servicii și deployment-uri, permițând orchestrarea automată a aplicațiilor containerizate.

Iată un exemplu de configurare a unui Pod Kubernetes:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app-container
      image: my-app:latest
      ports:
        - containerPort: 8080

Află mai multe despre cum este folosit YAML în Kubernetes în acest curs Introducere în Kubernetes.

Documentarea API-urilor

Specificații de API precum OpenAPI și Swagger folosesc YAML pentru a defini endpoint-uri și structuri de date într-un mod ușor de citit. YAML este folosit pentru a descrie metodele API, parametrii cererii, formatele răspunsurilor și metodele de autentificare.

Iată un exemplu de specificație OpenAPI în 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

Specificațiile OpenAPI, de exemplu, folosesc YAML pentru a documenta API-uri RESTful. Astfel pot oferi un plan clar pentru generarea de SDK-uri pentru clienți, documentație API interactivă și testare automată. Acest format structurat asigură consistență între implementările de API.

Lucrul cu fișiere YAML

YAML este folosit pe scară largă pentru fișiere de configurare, automatizare și serializarea datelor, dar, deoarece se bazează pe indentare, formatarea corectă este esențială. Iată cum poți citi, scrie, valida și edita YAML eficient.

Citirea și scrierea YAML în Python

Biblioteca PyYAML din Python poate parsa și genera YAML.

Imaginează-ți că ai următorul fișier YAML de configurare:

database:
  host: localhost
  port: 5432
  user: admin
  password: secret

Iată cum poți lucra cu fișierul tău de configurare în 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)

Dacă ești interesat să lucrezi cu date JSON în Python, aruncă o privire la tutorialul cuprinzător Python JSON.

Validarea fișierelor YAML

Pentru a asigura structura corectă, poți folosi instrumente pentru a verifica tab-uri în loc de spații sau probleme ciudate precum caractere repetate, probleme de sintaxă și spații de final.

Acestea sunt câteva validatoare YAML populare:

Editarea YAML

Poți scrie și edita YAML în orice editor de text, dar instrumentele de linting și evidențierea sintaxei îmbunătățesc lizibilitatea.

Câteva dintre editorii mei preferați:

  • VS Code (cu pluginuri YAML)
  • PyCharm (suport integrat)
  • Sublime Text (cu evidențierea sintaxei YAML)

Greșeli comune de evitat în YAML

În ciuda simplității sale, poți avea în continuare probleme și erori de tastare când lucrezi cu YAML. Această secțiune discută aceste greșeli și oferă bune practici pentru a scrie fișiere curate și corecte. De aceea recomand să folosești un linter sau un editor de text!

Amestecarea tab-urilor și spațiilor

YAML se bazează pe spații pentru indentare — nu amesteca niciodată spații și tab-uri. Tab-urile pur și simplu îți vor strica scriptul YAML. Aceasta este de fapt o decizie conștientă, deoarece sisteme diferite citesc tab-urile diferit și, astfel, pentru a minimiza impactul, spațiile sunt preferate.

Indentare incorectă

Asigură-te că ai o indentare consecventă pentru a evita erorile de parsare. Deoarece indentările sunt singura metodă a YAML de a denota ierarhia, parsarea improprie poate cauza probleme cu codul tău. Poți foarte ușor să „ascunzi” o pereche cheie: valoare în locul greșit, așa că fii atent la indentări!

Uitarea ghilimelelor pentru caractere speciale

Folosește ghilimele pentru șiruri care conțin caractere speciale sau spații. Elemente precum backslash-uri, virgule, semne de exclamare ș.a.m.d. au nevoie de ghilimele pentru a fi citite ca șiruri.

path: "/home/user/documents"
message: "Hello, World!"

Folosind o validare corespunzătoare, editare structurată și PyYAML din Python, poți lucra eficient cu fișiere YAML, evitând în același timp capcanele comune.

Concluzie

YAML este un format puternic, dar simplu, folosit pe scară largă în configurare, serializarea datelor și automatizarea infrastructurii. Înțelegând sintaxa, structura și bunele practici, poți lucra eficient cu YAML în diverse aplicații.

Dacă ești interesat să aplici YAML în scenarii reale:

Întrebări frecvente

YAML este universal?

Atâta timp cât sursa sau destinația datelor poate citi YAML, este o metodă viabilă și utilă de serializare și transport al datelor. Asigură-te că trimiți date către o destinație care poate procesa YAML.

YAML este sigur? Pot introduce fișierele YAML riscuri de securitate?

YAML în sine este doar un format de date, dar riscurile de securitate apar la parsarea fișierelor YAML neverificate. Metoda implicită yaml.load() din PyYAML pentru Python poate executa cod arbitrar încorporat în YAML, ceea ce este riscant. În schimb, folosește întotdeauna yaml.safe_load() pentru a preveni executarea neintenționată a codului malițios. În mod similar, când folosești YAML în aplicații, asigură validare strictă a schemei pentru a evita vulnerabilitățile de securitate.

Poate YAML să suporte variabile de mediu?

Da! Deși YAML în sine nu procesează direct variabile de mediu, multe instrumente (precum Docker Compose și Kubernetes) permit referențierea variabilelor de mediu în fișiere YAML.

Cum gestionezi comentariile în YAML?

YAML acceptă comentarii pe o singură linie folosind simbolul #, dar nu acceptă comentarii pe mai multe linii. Dacă ai nevoie de comentarii pe mai multe linii, un artificiu des întâlnit este să folosești o cheie fictivă precum _comment. Totuși, aceasta este doar o convenție și nu va fi ignorată de parser-ele YAML, decât dacă aplicația ta o filtrează explicit.

Subiecte
Data Engineering

Află mai multe despre data engineering cu aceste cursuri!

track

Inginer de date în Python

40 oră
Dobândește competențe foarte căutate pentru a ingera, curăța și gestiona eficient datele, precum și pentru a programa și monitoriza pipeline-urile, diferențiindu-te în domeniul ingineriei datelor.
Vezi detaliiRight Arrow
Începeți Cursul
Vezi mai multRight Arrow