Co to jest format pliku YAML?
.yaml to tekstowy format plików służący do wymiany danych między różnymi aplikacjami. YAML - skrót od *YAML Ain't Markup Language* - to standard organizowania informacji w czytelnym dla człowieka, niezależnym od platformy formacie, wykorzystującym pary klucz: wartość oparte na wcięciach, zakodowane w UTF-8. Parsowanie plików .yaml wymaga zainstalowania biblioteki YAML; popularne biblioteki to PyYAML (Python), js-yaml (JavaScript) i SnakeYAML (Java). Pliki .yaml są czasami zapisywane z rozszerzeniem .yml, które jest funkcjonalnie identyczne. Poza wymianą danych, pliki .yaml są zazwyczaj używane do serializacji danych oraz do pisania plików konfiguracyjnych w narzędziach takich jak Docker Compose, Kubernetes i GitHub Actions.
Serializacja
Serializacja to termin używany w informatyce. Jest to proces tłumaczenia danych lub obiektów na format, który może być przechowywany, przesyłany i później rekonstruowany. Na przykład dwie instytucje wymieniające dane w ustandaryzowanym formacie za pomocą różnych aplikacji muszą zserializować te dane przed wysłaniem. Zserializowane dane mogą być również przechowywane w pliku - .yaml, .xml, .json, .toml itp. - a następnie wysyłane do odbiorców.
Dokument .yaml może opcjonalnie zaczynać się od znacznika początku dokumentu --- i kończyć się ...; pozwala to również na umieszczenie wielu dokumentów wewnątrz jednego pliku. Od wersji YAML 1.2 (2009, poprawionej w 2021), każdy poprawny plik JSON jest również poprawnym plikiem YAML.
Bezpieczeństwo
RYZYKO: MEDIUMPlik YAML jest czystym tekstem i nie wykonuje się samodzielnie, więc jego odczyt jest bezpieczny. Istnieją dwa realne zagrożenia: (1) pliki konfiguracyjne YAML (potoki CI, Compose, K8s, Ansible) często zawierają sekrety - tokeny, hasła, klucze - więc nie wklejaj ich do niezaufanych walidatorów online ani nie publikuj w repozytoriach. (2) Niebezpieczeństwo programowe: ładowanie niezaufanego YAML za pomocą niebezpiecznego parsera (np. yaml.load w PyYAML zamiast yaml.safe_load) może wykonać dowolne obiekty/kod - zawsze używaj bezpiecznego ładowania dla plików, którym nie ufasz. Ryzyko edycji: tabulator lub źle wyrównana spacja po cichu zmienia znaczenie, więc po edycji przeprowadź walidację.
Szczegóły formatu
w pigułceProgramy otwierające pliki YAML
Szczegóły techniczne
specyfikacja| Rozszerzenie pliku | .yaml (również .yml) |
| Typ MIME | application/yaml |
| Kodowanie | Czysty tekst UTF-8; brak binarnego nagłówka lub magicznych bajtów |
| Struktura | Pary klucz: wartość oparte na wcięciach; wcięcia wykorzystują wyłącznie spacje - tabulatory są zabronione przez specyfikację |
| Znaczniki dokumentu | --- oznacza początek dokumentu, ... oznacza koniec dokumentu; wiele dokumentów może współistnieć w jednym pliku |
| Natywne typy danych | Ciągi znaków, liczby całkowite, liczby zmiennoprzecinkowe, wartości logiczne, null, sekwencje (listy), mapowania (słowniki), znaczniki czasu |
| Wersja specyfikacji | YAML 1.2 (2009, poprawiona w 2021); zastępuje YAML 1.1 (2005) i YAML 1.0 (2001) |
| Kompatybilność z JSON | Od wersji YAML 1.2 każdy poprawny dokument JSON jest również poprawnym dokumentem YAML - JSON jest ścisłym podzbiorem |
| Komentarze | Komentarze jednowierszowe wprowadzane przez # ; mogą występować w osobnej linii lub w tej samej linii po wartości |
| Ciągi wielowierszowe | Dosłowny blok skalarny (|) zachowuje znaki nowej linii; złożony blok skalarny (>) zamienia znaki nowej linii na spacje |
| Kotwice i aliasy | & definiuje nazwaną kotwicę, a * odwołuje się do niej (alias), umożliwiając ponowne użycie wartości bez duplikacji |
| Twórcy | Clark Evans, Ingy döt Net, Oren Ben-Kiki |
| Typowe zastosowania | Pliki konfiguracyjne (Kubernetes, Docker Compose, GitHub Actions, Ansible), serializacja danych, definicje OpenAPI |
| Cudzysłowy | Obsługiwane są ciągi bez cudzysłowów, w pojedynczych cudzysłowach ('...') oraz w podwójnych cudzysłowach ("..."); podwójne cudzysłowy pozwalają na sekwencje ucieczki |
| Wydano | 2001 (YAML 1.0); YAML 1.1 (2005); current YAML 1.2 (2009, revised 2021) |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | yaml.org |