Configurație TOML (.toml)
Specificația StandardTom's Obvious Minimal Language (TOML) este un format de configurare neambiguu, conceput pentru a fi ușor de citit de oameni, creat de co-fondatorul GitHub Tom Preston-Werner și adoptat pe scară largă în ecosistemele de programare moderne, inclusiv Rust (Cargo) și Python (pyproject.toml).
Convertește din TOML în JSON
Convertor gratuit din TOML în JSON direct în browser. Convertește fișiere instantaneu pe dispozitivul tău.
Inspectare și metadate
Sistemele de operare și analizatoarele de fișiere identifică fișierele TOML prin inspectarea secvenței binare inițiale:
Semnătura antetului la nivel de octet (octeți magici)
Sistemele de operare și analizatoarele de fișiere identifică fișierele TOML prin inspectarea secvenței binare inițiale:
SEMNĂTURĂ HEXAZECIMALĂ (DECALAJ 0):
5B ... 5DREPREZENTARE ASCII: [...]
Standardizare: Specificația TOML v1.0.0
Specificații tehnice
| Arhitectură container | Fișier de configurare lizibil, care se mapează fără echivoc la un tabel hash și este structurat cu [tabele] și perechi cheie = valoare |
| Compresie | Flux text necomprimat |
| Ordinea octeților | Flux text UTF-8 |
| Spații de culoare | Nu se aplică (fișier de configurare) |
| Canale și structură | Tabele, tablouri de tabele, tabele inline, șiruri, numere întregi, numere în virgulă mobilă, valori booleene și date-timp RFC 3339 |
| Dimensiuni maxime | Lungime de text nelimitată |
| Transparență | Nu există |
| Streaming și progresiv | Analiză secvențială a configurației, rând cu rând |
Matrice de comparație tehnică: TOML vs. concurenți
| Atribut tehnic | TOML (Curent) | YAML | JSON | INI |
|---|---|---|---|---|
| Risc de ambiguitate | Zero (specificație strict lipsită de ambiguitate) | Ridicat (erori legate de valorile booleene cauzate de 'problema Norvegiei' în YAML) | Zero (tipuri de date stricte) | Moderat (fără standard formal) |
| Tipuri native de dată și oră | Suport nativ pentru dată și oră RFC 3339 | Interpretarea implicită a șirurilor / datelor | Niciunul (doar șiruri de caractere) | Niciunul (doar șiruri de caractere) |
| Suport pentru comentarii | Nativ (comentarii cu #) | Nativ (comentarii cu #) | Nu sunt permise comentarii | Nativ (comentarii cu ; și #) |
| Ecosistem principal | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, fluxuri CI/CD | API-uri Web, comunicare în browser | Windows și configurarea Git din sisteme vechi |
Moduri comune de corupție și ghid de recuperare hexazecimală
Eroare de analizor: 'Duplicate key in table' sau 'Invalid table header'.
Cauză principală: Încercarea de a redefini o cheie existentă sau un spațiu de nume de tabel în cadrul documentului.
Recuperare: Validează și reformatează sintaxa TOML folosind File2File.app TOML Formatter.
Analiză de securitate și vectori de atac asupra parserului
Analizoarele TOML trebuie să se protejeze împotriva poluării prototipurilor și a epuizării procesorului cauzate de imbricarea patologică a matricelor de tabele.
Vectori de atac cunoscuți
- Poluarea prototipurilor în analizoarele TOML JavaScript, injectând proprietăți în Object.prototype.
- Refuz de serviciu (DoS) prin declarații de matrice de tabele imbricate profund.
- Alocare nelimitată de memorie în timpul analizei matricelor inline masive.
Cele mai bune practici de securitate: Validează limitele de imbricare a tabelelor și folosește obiecte dicționar protejate împotriva poluării prototipurilor.
Origini istorice și repere
Avantaje cheie și beneficii
- Complet neambiguu: se mapează clar și predictibil la un tabel hash, fără nicio conversie surpriză de tip.
- Suport nativ de primă clasă pentru date și timp (marcaje temporale RFC 3339, date, ore) fără a necesita caractere de escape în șirurile de caractere.
- Adoptat ca format de configurare standard oficial pentru instrumentele moderne pentru limbaje de programare (Rust Cargo.toml, Python pyproject.toml).
Limitări tehnice și dezavantaje
- Arborii de obiecte imbricați profund pe mai multe niveluri pot deveni greoi în comparație cu YAML.
- Sintaxa pentru tablouri de tabele ([[table.array]]) poate fi greu de intuit pentru începători.
- Mai puțin compact decât JSON pentru schimbul de date API între mașini cu debit ridicat.
Curiozități tehnice interesante
- TOML a fost creat de Tom Preston-Werner, care a cofondat GitHub și a creat Gravatar și SemVer (Semantic Versioning).
- Pachetele Cargo folosesc Cargo.toml pentru metadate, dependențe și ținte; proiectele Rust care folosesc alte sisteme de construire pot avea fișiere diferite.
- Spre deosebire de JSON, TOML acceptă nativ comentarii (utilizând caracterul '#') și șiruri de caractere pe mai multe rânduri.
Întrebări tehnice frecvente
Pentru ce este folosit TOML?
TOML este folosit pentru configurarea software-ului, în special în Cargo.toml din Rust, pyproject.toml din Python, configurațiile Hugo pentru Go și instrumente pentru containere.
De ce este preferat TOML în fața YAML pentru configurare?
TOML evită erorile de parsare bine cunoscute din YAML în situații limită (cum ar fi transformarea valorii neghilimate 'NO' în booleanul false), rămânând în același timp prietenos cu utilizatorul prin comentarii și tabele clare.
Cum pot converti TOML în JSON sau YAML?
Poți converti fișiere TOML în JSON sau YAML instantaneu folosind File2File.app direct în browserul tău web.
Perechi de conversie TOML conexe
Conversia fișierelor de configurare TOML în format JSON traduce setările proprietăților prietenoase pentru oameni într-un obiect de date strict pe care aplicațiile web îl pot parsa instantaneu.
Conversia fișierelor de configurare JSON în format TOML simplifică editarea manuală, păstrând în același timp toate ierarhiile structurate de date de tip cheie-valoare.