Konfiguracja TOML (.toml)
TOML StandardTom’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:
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 ... 5DREPREZENTACJA ASCII: [...]
Normalizacja: TOML v1.0.0 Specification
Specyfikacja techniczna
| Architektura kontenera | Czytelny dla człowieka plik konfiguracyjny, którego struktura jednoznacznie odpowiada tablicy haszującej; używa sekcji [tables] i par klucz = wartość |
| Kompresja | Nieskompresowany strumień tekstu |
| Kolejność bajtów (Endianness) | Strumień tekstu UTF-8 |
| Przestrzenie kolorów | Nie dotyczy (plik konfiguracyjny) |
| Kanały i struktura | Tabele, 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. wymiary | Nieograniczona długość tekstu |
| Przezroczystość | Brak |
| Streaming i progresywne ładowanie | Sekwencyjne przetwarzanie konfiguracji wiersz po wierszu |
Techniczna macierz porównawcza: TOML a konkurencja
| Atrybut techniczny | TOML (Bieżący) | YAML | JSON | INI |
|---|---|---|---|---|
| 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 czasu | Natywna obsługa daty i czasu według RFC 3339 | Niejawne analizowanie ciągów znaków / dat | Brak (tylko ciągi znaków) | Brak (tylko ciągi znaków) |
| Obsługa komentarzy | Natywna obsługa komentarzy (#) | Natywna obsługa komentarzy (#) | Komentarze są niedozwolone | Natywna obsługa komentarzy (; i #) |
| Główny ekosystem | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, potoki CI/CD | API internetowe, komunikacja w przeglądarce | Starsze 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
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.
Powiązane pary konwersji TOML
Konwersja plików konfiguracyjnych TOML na format JSON przekształca czytelne dla człowieka ustawienia właściwości w obiekt danych o ściśle określonej strukturze, który aplikacje internetowe mogą natychmiast przetworzyć.
Konwersja plików konfiguracyjnych JSON do formatu TOML ułatwia edycję przez człowieka, zachowując wszystkie hierarchie danych strukturalnych w postaci par klucz-wartość.