TOML vs YAML: ta sama konfiguracja w trzech formatach

TOML vs YAML

TOML vs YAML (i JSON): ta sama konfiguracja na trzy sposoby | We.Inc

Porównaj TOML, YAML i JSON na tych samych plikach konfiguracyjnych, obok siebie. Zobacz, gdzie każdy format jest wymagany, od pyproject.toml i Cargo.toml po compose.yaml.

TOML to format podobny do INI, stworzony dla plików konfiguracyjnych: jawne nagłówki [table], stringi w cudzysłowach, prawdziwe typy dat i wcięcia bez znaczenia. YAML opiera się na wcięciach, zgaduje typy z wartości bez cudzysłowów i dodaje kotwice oraz wiele dokumentów. Przy płytkich ustawieniach TOML trudniej zepsuć; przy głębokim zagnieżdżeniu YAML czyta się lepiej.

TOML, YAML i JSON w skrócie

Zwykle nie masz wyboru: pakiety Pythona czytają pyproject.toml, Rust czyta Cargo.toml, a GitHub Actions i Docker Compose czytają YAML. Gdy jednak możesz wybrać, zobaczenie jednej konfiguracji we wszystkich trzech formatach sprawia, że kompromisy stają się oczywiste. Wybierz przykład poniżej i porównaj.

Najczęściej zadawane pytania

Czy TOML jest lepszy niż YAML?

Żaden nie wygrywa wszędzie. Jawne nagłówki i obowiązkowe cudzysłowy w TOML sprawiają, że małe i średnie pliki konfiguracyjne trudno źle odczytać. YAML obsługuje głębokie zagnieżdżenie i długie listy z mniejszym szumem, za cenę składni wrażliwej na białe znaki i niejawnego typowania.

Dlaczego Python używa pyproject.toml?

Przewodniki po pakietach Pythona definiują pyproject.toml z trzema tabelami: [build-system] dla backendu budowania, [project] dla metadanych, takich jak nazwa, wersja i zależności, oraz [tool] dla ustawień poszczególnych narzędzi, na przykład linterów.

Czy TOML może wyrazić wszystko, co YAML?

Nie wszystko. TOML nie ma kotwic ani aliasów, wielu dokumentów w jednym pliku ani null, bo każdy klucz musi mieć wartość. W konfiguracji rzadko ma to znaczenie, ale danych YAML opartych na tych funkcjach nie da się przekonwertować jeden do jednego.

Jakie formaty akceptują Docker Compose i GitHub Actions?

Oba używają YAML. Workflowy GitHub Actions znajdują się w .github/workflows z rozszerzeniem .yml lub .yaml, a Compose domyślnie szuka compose.yaml, nadal akceptując docker-compose.yaml w starszych projektach.

Czy TOML obsługuje stringi wieloliniowe?

Tak. Trzy podwójne cudzysłowy rozpoczynają wieloliniowy string podstawowy, który pozwala na escapowanie, a trzy pojedyncze cudzysłowy rozpoczynają wieloliniowy string literalny, który zachowuje treść dokładnie tak, jak została zapisana.

Gdzie każdy format jest wymagany

Z czego TOML rezygnuje dla bezpieczeństwa

Które pliki używają którego formatu

Popularne pliki konfiguracyjne i wymagany przez nie format

Składnia TOML, którą warto znać

Klucze z kropkami, tabele inline i daty

Klucze z kropkami i tabele inline pozwalają uniknąć dodatkowych nagłówków dla małych grup, a daty to otypowane wartości, a nie stringi.

Jedna konfiguracja w TOML, YAML i JSON

Wybierz przykład. Wszystkie trzy wersje zawierają dokładnie te same dane, więc możesz porównać, jak każdy format je zapisuje.

Przykładowa konfiguracja

TOML

YAML

JSON

W przykładzie ustawień aplikacji TOML przechowuje opens jako prawdziwy czas lokalny, a wersje YAML i JSON trzymają go jako string.

Ustawienia aplikacji

Manifest pakietu

Lista serwerów

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony