Konfiguracja TOML (.toml)

TOML Standard

Tom’s Obvious Minimal Language (TOML) to jednoznaczny, przyjazny dla użytkownika format konfiguracyjny stworzony przez współzałożyciela GitHuba Toma Prestona-Wernera. Jest szeroko stosowany w nowoczesnych ekosystemach programistycznych, w tym w Rust (Cargo) i Pythonie (pyproject.toml).

Konwertuj TOML na JSON

Darmowy konwerter z TOML na JSON w przeglądarce. Konwertuj pliki natychmiast na swoim urządzeniu.

Inspekcja i metadane

Systemy operacyjne i analizatory plików identyfikują pliki TOML, sprawdzając początkową sekwencję bajtów binarnych:

Wybierz lub upuść pliki tutaj

Prywatnie - pliki nigdy nie opuszczają Twojego urządzenia

lub wklej Ctrl+V
Gwarancja prywatności bez przesyłania danych do sieci: 0 bajtów przesłanych na zewnętrzne serwery. Całe przetwarzanie odbyło się lokalnie w piaskownicy przeglądarki.

Podpis nagłówka na poziomie bajtów (Magic Bytes)

Systemy operacyjne i analizatory plików identyfikują pliki TOML, sprawdzając początkową sekwencję bajtów binarnych:

PODPIS HEX (OFFSET 0):

5B ... 5D

REPREZENTACJA ASCII: [...]

Normalizacja: TOML v1.0.0 Specification

Specyfikacja techniczna

Architektura konteneraCzytelny dla człowieka plik konfiguracyjny, którego struktura jednoznacznie odpowiada tablicy haszującej; używa sekcji [tables] i par klucz = wartość
KompresjaNieskompresowany strumień tekstu
Kolejność bajtów (Endianness)Strumień tekstu UTF-8
Przestrzenie kolorówNie dotyczy (plik konfiguracyjny)
Kanały i strukturaTabele, tablice tabel, tabele wbudowane, ciągi znaków, liczby całkowite i zmiennoprzecinkowe, wartości logiczne oraz daty i godziny w formacie RFC 3339
Maks. wymiaryNieograniczona długość tekstu
PrzezroczystośćBrak
Streaming i progresywne ładowanieSekwencyjne przetwarzanie konfiguracji wiersz po wierszu

Techniczna macierz porównawcza: TOML a konkurencja

Atrybut technicznyTOML (Bieżący)YAMLJSONINI
Ryzyko niejednoznacznościŻadne (ściśle jednoznaczna specyfikacja)Wysokie (błędy typu 'problem z Norwegią' w YAML dotyczące wartości logicznych)Żadne (ścisłe typy danych)Umiarkowane (brak formalnego standardu)
Natywne typy daty i czasuNatywna obsługa daty i czasu według RFC 3339Niejawne analizowanie ciągów znaków / datBrak (tylko ciągi znaków)Brak (tylko ciągi znaków)
Obsługa komentarzyNatywna obsługa komentarzy (#)Natywna obsługa komentarzy (#)Komentarze są niedozwoloneNatywna obsługa komentarzy (; i #)
Główny ekosystemRust (Cargo), Python (PEP 518), GoKubernetes, Ansible, potoki CI/CDAPI internetowe, komunikacja w przeglądarceStarsze systemy Windows, konfiguracja Git

Typowe tryby uszkodzeń i przewodnik odzyskiwania szesnastkowego

Błąd parsera: „Powtórzony klucz w tabeli” lub „Nieprawidłowy nagłówek tabeli”.

Główna przyczyna: Próba ponownego zdefiniowania istniejącego klucza lub przestrzeni nazw tabeli w dokumencie.

Odzyskiwanie: Zweryfikuj i sformatuj składnię TOML za pomocą formatera TOML w File2File.app.

Analiza bezpieczeństwa i wektory ataku na parser

Analizatory TOML muszą chronić przed skażeniem prototypu (prototype pollution) oraz wyczerpaniem zasobów procesora wynikającym z patologicznego zagnieżdżania tablic tabel.

Znane wektory ataku

  • Skażenie prototypu w parserach TOML języka JavaScript przez wstrzykiwanie właściwości do Object.prototype.
  • Atak typu odmowa usługi (DoS) poprzez głęboko zagnieżdżone deklaracje tablic tabel.
  • Nieograniczona alokacja pamięci podczas analizowania bardzo dużych tablic zapisanych w jednym wierszu.

Najlepsze praktyki obronne: Sprawdzaj limity zagnieżdżania tabel i używaj obiektów słowników odpornych na skażenie prototypu.

Pochodzenie historyczne i kamienie milowe

2021TOML w wersji 1.0.0 zostaje oficjalnie wydany, a jego podstawowa składnia ustalona.
2018Python przyjmuje 'pyproject.toml' (PEP 518) jako nowoczesny standard konfiguracji procesu budowania.
2013Tom Preston-Werner publikuje TOML, aby zapewnić przejrzysty format konfiguracyjny bez złożoności YAML.

Główne zalety

  • Pełna jednoznaczność: format mapuje się przewidywalnie na tablicę haszującą i nie powoduje nieoczekiwanej konwersji typów.
  • Wbudowana obsługa typów daty i czasu (znaczników czasu RFC 3339, dat i godzin) bez konieczności escapowania znaków.
  • Przyjęty jako oficjalny standard formatu konfiguracji dla nowoczesnych narzędzi językowych (Rust Cargo.toml, Python pyproject.toml).

Ograniczenia techniczne i wady

  • Głęboko zagnieżdżone, wielopoziomowe drzewa obiektów mogą być bardziej rozwlekłe niż w YAML.
  • Składnia tablic tabel ([[table.array]]) może być nieintuicyjna dla początkujących.
  • Mniejsza zwięzłość niż w JSON przy wymianie danych API o dużej przepustowości między systemami.

Ciekawe informacje techniczne

  • TOML został stworzony przez Toma Prestona-Wernera, który jest również współzałożycielem serwisu GitHub oraz twórcą Gravatar i SemVer (Semantic Versioning).
  • Pakiety Cargo używają pliku Cargo.toml do deklarowania metadanych, zależności i celów; projekty Rust korzystające z innych systemów budowania mogą używać innych plików.
  • W przeciwieństwie do JSON, TOML natywnie obsługuje komentarze (przy użyciu znaku '#') oraz łańcuchy wielolinijkowe.

Często zadawane pytania techniczne

Do czego służy TOML?

TOML służy do konfiguracji oprogramowania, zwłaszcza w plikach Cargo.toml języka Rust, pyproject.toml Pythona, konfiguracjach Hugo napisanego w Go oraz narzędziach kontenerowych.

Dlaczego do konfiguracji wybiera się TOML zamiast YAML?

TOML pozwala uniknąć znanych błędów parsowania YAML w przypadkach brzegowych (takich jak zamiana nieujętego w cudzysłów 'NO' na wartość logiczną false), pozostając przy tym czytelnym dla człowieka dzięki komentarzom i przejrzystym tabelom.

Jak mogę przekonwertować TOML na JSON lub YAML?

Możesz błyskawicznie przekonwertować pliki TOML na format JSON lub YAML za pomocą File2File.app bezpośrednio w przeglądarce internetowej.