Przejdź do głównej treści
Grafika przedstawia ukryty obrazek

YAML – techniczny przegląd formatu konfiguracji

Obraz Logo YAML

YAML (YAML Ain't Markup Language) to lekki, czytelny dla człowieka format serializacji danych, który jest często stosowany do konfiguracji aplikacji i wymiany danych między systemami. Zaprojektowany z myślą o prostocie i przejrzystości, YAML zyskał popularność w wielu środowiskach programistycznych, w tym w DevOps, infrastrukturze jako kod (IaC), oraz frameworkach webowych.

Cechy charakterystyczne YAML

  • Czytelność: YAML ma składnię zbliżoną do struktury naturalnego języka (angielskiego), bazuje głównie na wcięciach, co sprawia, że jest bardziej przejrzysty niż JSON lub XML.
  • Bez typowych nawiasów: YAML nie używa znaków takich jak {}, [], które są typowe dla JSON-a, co poprawia czytelność.
  • Wieloliniowe teksty: YAML wspiera wiele sposobów zapisu danych tekstowych, w tym teksty wieloliniowe (|, >).
  • Obsługa aliasów i kotwic: YAML pozwala na używanie referencji (&, *) co ułatwia unikanie duplikacji danych.

Przykład pliku YAML

database:
  host: localhost
  port: 3306
  user: root
  password: secret
features:
  logging: true
  cache:
    enabled: true
    ttl: 3600

Zalety YAML

  1. Czytelność i prostota – idealny do konfiguracji pisanej i czytanej przez ludzi.
  2. Hierarchiczna struktura – naturalne odwzorowanie zagnieżdżonych danych.
  3. Wieloplatformowość – obsługiwany przez wiele języków i narzędzi.
  4. Rozszerzalność – wsparcie dla niestandardowych typów danych przez tagi.

Wady YAML

  1. Brak formalnego standardu – mimo istnienia specyfikacji, różne parsery mogą interpretować YAML inaczej.
  2. Wrażliwość na wcięcia – błędy w strukturze mogą być trudne do wykrycia.
  3. Brak typów jawnych – YAML domyślnie nie określa typów, co może prowadzić do nieoczekiwanych konwersji (np. no jako false).
  4. Problemy z bezpieczeństwem – niektóre parsery YAML (np. w Pythonie: yaml.load) są podatne na ataki typu arbitrary code execution, jeśli użyte są niebezpieczne źródła.

Zastosowania YAML

  • Pliki konfiguracyjne: np. w Kubernetes (deployment.yaml), Docker Compose (docker-compose.yaml), Ansible, GitHub Actions (.github/workflows/*.yml).
  • Definicje struktur danych: np. w OpenAPI/Swagger, CI/CD.
  • Infrastruktura jako kod: np. w Terraform (częściowo), CloudFormation (YAML zamiast JSON).

Porównanie YAML z innymi formatami konfiguracji

Format Czytelność Wsparcie dla zagnieżdżeń Typowanie Bezpieczeństwo Parsowanie Popularność
YAML Wysoka Tak Słabe Zależy od parsera Średnie Wysoka (DevOps)
JSON Średnia Tak Dobre Wysokie Bardzo szybkie Bardzo wysoka
XML Niska Tak Dobre Wysokie Wolniejsze Niska (obecnie)
TOML Wysoka Ograniczona Dobre Wysokie Szybkie Średnia (Rust, Python)
INI Wysoka Ograniczona Słabe Średnie Szybkie Umiarkowana
PHP array Średnia Tak Dobre (jawne) Wysokie Bardzo szybkie (natywnie w PHP) Wysoka (projekty PHP)

Użycie YAML w PHP z biblioteką Spyc

Spyc to lekka, jedno-plikowa biblioteka do parsowania YAML w PHP. Nie wymaga rozszerzeń, ani instalacji przez Composer (choć może być używana i w taki sposób). Idealna dla małych projektów.

Instalacja

Najprościej: pobierz plik spyc.php ze strony projektu (np. z https://github.com/mustangostang/spyc) i załaduj:

require_once 'spyc.php';

Przykład użycia

Przykładowy plik konfiguracyjny config.yaml:

app:
  name: MyApp
  debug: true
database:
  host: localhost
  port: 3306
  username: root
  password: secret

Wczytanie YAML do tablicy PHP:

require_once 'spyc.php';

$config = Spyc::YAMLLoad('config.yaml');

echo $config['app']['name']; // MyApp
echo $config['database']['host']; // localhost

Konwersja tablicy PHP do YAML:

$data = [
  'app' => [
    'name' => 'AnotherApp',
    'debug' => false,
  ],
];

$yamlString = Spyc::YAMLDump($data);
echo $yamlString;

Porównanie Spyc z innymi bibliotekami YAML w PHP

Biblioteka Waga / złożoność Sposób instalacji Wydajność Zgodność ze specyfikacją YAML Obsługa funkcji YAML (kotwice, typy, itd.) Uwagi
Spyc Lekka, 1 plik ręczna / git / Composer Dobra YAML 1.1 Ograniczona (brak wsparcia dla aliasów) Prosty parser, wystarczający do 90% użyć
Symfony YAML Średnia composer require symfony/yaml Bardzo dobra YAML 1.2 częściowo Dobra (aliasy, typy, wyjątki) Bardzo popularna, dobrze utrzymywana
ext-yaml (PECL) Wysoka (C) pecl install yaml Najszybsza YAML 1.1 Bardzo dobra Wymaga PECL i C-ext – nie zawsze dostępna
yaml-php/yaml Lekka / śr. composer require yaml/yaml Średnia YAML 1.2 częściowo Podobna do Symfony Mało aktywna, ale działa poprawnie

Kiedy warto wybrać Spyc?

  • Potrzebujesz lekkości i braku zależności (np. do małego projektu, CLI, pluginu).
  • Chcesz po prostu sparsować YAML do tablicy PHP.
  • Nie potrzebujesz wsparcia dla zaawansowanych funkcji YAML jak kotwice (&, *) czy tagi typów (!!str).

Porównanie formatów YAML, PHP, XML i JSON

Oto porównanie tego samego pliku konfiguracyjnego w czterech formatach: YAML, PHP array, XML i JSON. Po przykładach podsumujemy zalety YAML, ale też pokażemy, dlaczego PHP array często bywa bardziej praktyczny w kontekście projektów PHP.

1. YAML (config.yaml)

app:
  name: MyApp
  debug: true
database:
  host: localhost
  port: 3306
  username: root
  password: secret

Zalety:

  • Bardzo czytelny i zwięzły.
  • Przypomina strukturę języka naturalnego.
  • Idealny dla DevOps, sysadminów, CI/CD.

Wady:

  • Wrażliwy na wcięcia (łatwo popełnić błąd).
  • Wymaga parsera.
  • Brak logiki (np. brak env() lub if()).

2. PHP (config.php)

<?php

return [
  'app' => [
    'name' => 'MyApp',
    'debug' => true,
  ],
  'database' => [
    'host' => 'localhost',
    'port' => 3306,
    'username' => 'root',
    'password' => 'secret',
  ],
];

Zalety:

  • Natywny dla PHP – nie wymaga parsera.
  • Wysoka wydajność (include / require).
  • Możliwość dynamicznej logiki:

    'debug' => getenv('APP_DEBUG') === 'true',

Wady:

  • Mniej przyjazny wizualnie.
  • Mało zrozumiały dla osób nie znających PHP.

3. XML (config.xml)

<config>
  <app>
    <name>MyApp</name>
    <debug>true</debug>
  </app>
  <database>
    <host>localhost</host>
    <port>3306</port>
    <username>root</username>
    <password>secret</password>
  </database>
</config>

Zalety:

  • Formalny, dobrze wspierany standard.
  • Walidowalny przez XSD/DTD.

Wady:

  • Najmniej czytelny z formatów.
  • Bardzo rozwlekły.
  • Nieintuicyjna składnia, trudna ręczna edycja.

4. JSON (config.json)

{
  "app": {
    "name": "MyApp",
    "debug": true
  },
  "database": {
    "host": "localhost",
    "port": 3306,
    "username": "root",
    "password": "secret"
  }
}

Zalety:

  • Popularny, dobrze wspierany przez języki.
  • Łatwo serializować i deserializować.

Wady:

  • Brak komentarzy (to częsty problem).
  • Dla większych plików traci czytelność.

Podsumowanie: YAML vs PHP

Cecha YAML PHP array
Czytelność (ludzka, zwięzła)
Natywność w PHP wymaga parsera tak
Obsługa logiki brak pełna (env, if, itp.)
Błędy składniowe wcięcia mogą sprawiać problemy szybciej wykrywane
Wydajność Średnia (parsowanie tekstu) Bardzo wysoka (include)
Zrozumiałość dla nietechnicznych często tak często nie

Wnioski

YAML jest potężnym i elastycznym formatem konfiguracji, który dzięki swojej czytelności świetnie sprawdza się w projektach DevOps, CI/CD oraz aplikacjach wieloplatformowych. Jednak jego złożoność składniowa i potencjalne problemy bezpieczeństwa wymagają ostrożnego stosowania, zwłaszcza w aplikacjach o wysokich wymaganiach niezawodności. W środowiskach PHP, natywne pliki konfiguracyjne z użyciem tablicy mogą być wydajniejszą alternatywą, zwłaszcza w sytuacjach, gdzie ważna jest możliwość dynamicznego sterowania konfiguracją.

  • YAML świetnie sprawdza się tam, gdzie konfigurację edytują osoby nietechniczne, DevOpsi lub pliki są częścią infrastruktury (np. Kubernetes, CI/CD).
  • PHP array to najpraktyczniejszy wybór w projektach PHP, gdzie:
    • liczy się wydajność i prostota,
    • potrzebna jest logika (np. zmienne środowiskowe),
    • chcemy uniknąć zależności (parserów YAML).
  • Spyc to dobra opcja, jeśli cenisz prostotę i brak zależności.
  • Symfony YAML sprawdzi się w większych projektach (np. z Symfony, Laravel – choć Laravel używa własnego wrappera).
  • PECL ext-yaml to najszybsze, ale wymaga dodatkowego rozszerzenia serwera.

Zapoznaj się z moją aplikacją do testowania YAML:
http://www.dariuszrorat.ugu.pl/aplikacje/yaml-tester

5 lipca 2025 3

Kategorie

pozostałe

Tagi

yaml

Dziękujemy!
()

Informacja o cookies

Moja strona internetowa wykorzystuje wyłącznie niezbędne pliki cookies, które są wymagane do jej prawidłowego działania. Nie używam ciasteczek w celach marketingowych ani analitycznych. Korzystając z mojej strony, wyrażasz zgodę na stosowanie tych plików. Możesz dowiedzieć się więcej w mojej polityce prywatności.