Cấu hình TOML (.toml)
TOML Tiêu chuẩnTom's Obvious Minimal Language (TOML) là định dạng cấu hình không mơ hồ, hướng đến con người, được tạo bởi người đồng sáng lập GitHub Tom Preston-Werner, được áp dụng rộng rãi trong các hệ sinh thái lập trình hiện đại bao gồm Rust (Cargo) và Python (pyproject.toml).
Chuyển đổi TOML sang JSON
Trình chuyển đổi từ TOML sang JSON miễn phí trên trình duyệt. Chuyển đổi tệp ngay lập tức trên thiết bị của bạn.
Kiểm tra & Siêu dữ liệu
Các hệ điều hành và trình phân tích tệp nhận dạng tệp TOML bằng cách kiểm tra chuỗi byte nhị phân đầu tệp:
Chữ ký tiêu đề ở cấp độ Byte (Magic Bytes)
Các hệ điều hành và trình phân tích tệp nhận dạng tệp TOML bằng cách kiểm tra chuỗi byte nhị phân đầu tệp:
CHỮ KÝ HEX (OFFSET 0):
5B ... 5DBIỂU DIỄN ASCII: [...]
Tiêu chuẩn hóa: TOML v1.0.0 Specification
Thông số kỹ thuật
| Kiến trúc Container | Human-readable configuration file mapping unequivocally to a hash table, structured with [tables] and key = value pairs |
| Nén | Uncompressed text stream |
| Thứ tự byte Endianness | UTF-8 text stream |
| Không gian màu | N/A (Configuration File) |
| Kênh & Cấu trúc | Tables, arrays of tables, inline tables, strings, integers, floats, booleans, and RFC 3339 datetimes |
| Kích thước tối đa | Unbounded text length |
| Độ trong suốt | None |
| Truyền phát & Tăng dần | Sequential line-by-line configuration parsing |
Ma trận so sánh kỹ thuật: TOML so với các đối thủ
| Thuộc tính kỹ thuật | TOML (Hiện tại) | YAML | JSON | INI |
|---|---|---|---|---|
| Rủi ro mơ hồ | Không có (đặc tả nghiêm ngặt không mơ hồ) | Cao (lỗi boolean 'vấn đề Na-uy' của YAML) | Không có (kiểu dữ liệu nghiêm ngặt) | Trung bình (không có tiêu chuẩn chính thức) |
| Kiểu ngày giờ nguyên bản | Hỗ trợ ngày & giờ nguyên bản theo chuẩn RFC 3339 | Phân tích cú pháp chuỗi / ngày ngầm định | Không có (chỉ có chuỗi) | Không có (chỉ có chuỗi) |
| Hỗ trợ chú thích | Nguyên bản (chú thích #) | Nguyên bản (chú thích #) | Không cho phép chú thích | Nguyên bản (chú thích ; và #) |
| Hệ sinh thái chính | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, quy trình CI/CD | Web API, giao tiếp trình duyệt | Windows cũ, cấu hình Git |
Các chế độ hỏng hóc phổ biến & Hướng dẫn khôi phục Hex
Lỗi trình phân tích cú pháp: 'Duplicate key in table' hoặc 'Invalid table header'.
Nguyên nhân gốc rễ: Cố gắng xác định lại một khóa hiện có hoặc không gian tên bảng trong tài liệu.
Khắc phục: Xác thực và định dạng lại cú pháp TOML bằng Công cụ định dạng TOML của File2File.
Phân tích bảo mật & Các vectơ tấn công bộ phân tích cú pháp
Các trình phân tích cú pháp TOML phải đề phòng ô nhiễm nguyên mẫu (prototype pollution) và kiệt quệ CPU từ việc lồng mảng bảng bệnh lý.
Các Véc-tơ Tấn công Đã biết
- Ô nhiễm nguyên mẫu trong các trình phân tích cú pháp TOML bằng JavaScript tiêm các thuộc tính vào Object.prototype.
- Từ chối dịch vụ thông qua các khai báo mảng bảng lồng nhau sâu.
- Cấp phát bộ nhớ không giới hạn trong quá trình phân tích cú pháp mảng nội tuyến lớn.
Thực tiễn Tốt nhất về Phòng thủ:
Nguồn gốc lịch sử & Các cột mốc
Ưu điểm & Lợi ích chính
- Hoàn toàn không mơ hồ: ánh xạ rõ ràng và có thể dự đoán được sang bảng băm (hash table) mà không có sự chuyển đổi kiểu dữ liệu bất ngờ nào.
- Hỗ trợ ngày giờ nguyên bản hạng nhất (dấu thời gian, ngày, giờ theo chuẩn RFC 3339) mà không cần ký tự thoát chuỗi.
- Được áp dụng làm định dạng cấu hình chuẩn chính thức cho các công cụ ngôn ngữ hiện đại (Rust Cargo.toml, Python pyproject.toml).
Hạn chế & Nhược điểm kỹ thuật
- Các cây đối tượng đa cấp lồng nhau sâu có thể trở nên dài dòng so với YAML.
- Cú pháp cho mảng các bảng ([[table.array]]) có thể không trực quan đối với người mới bắt đầu.
- Ít gọn gàng hơn JSON đối với việc trao đổi dữ liệu API giữa máy với máy có thông lượng cao.
Thông tin kỹ thuật thú vị
- TOML được tạo ra bởi Tom Preston-Werner, người cũng đồng sáng lập GitHub và tạo ra Gravatar cũng như SemVer (Semantic Versioning).
- Tệp 'Cargo.toml' trong mọi dự án Rust chỉ định tất cả các phụ thuộc gói và cờ trình biên dịch ở định dạng TOML.
- Không giống như JSON, TOML hỗ trợ nguyên bản các chú thích (sử dụng ký tự '#') và chuỗi nhiều dòng.
Các câu hỏi kỹ thuật thường gặp
TOML dùng để làm gì?
TOML được sử dụng để cấu hình phần mềm, đáng chú ý nhất là trong Cargo.toml của Rust, pyproject.toml của Python, cấu hình Hugo của Go và các công cụ container.
Tại sao TOML được ưu tiên hơn YAML cho việc cấu hình?
TOML tránh được các lỗi phân tích cú pháp ngoại lệ tai tiếng của YAML (chẳng hạn như từ 'NO' không có dấu ngoặc kép bị biến đổi thành giá trị boolean false), trong khi vẫn giữ được sự thân thiện với con người thông qua các chú thích và bảng rõ ràng.
Làm thế nào để chuyển đổi TOML sang JSON hoặc YAML?
Bạn có thể chuyển đổi các tệp TOML sang JSON hoặc YAML ngay lập tức bằng File2File.app trực tiếp trong trình duyệt web của mình.
Các cặp chuyển đổi TOML liên quan
Chuyển đổi tệp cấu hình TOML sang định dạng JSON dịch các cài đặt thuộc tính thân thiện với con người thành một đối tượng dữ liệu nghiêm ngặt mà các ứng dụng web có thể phân tích cú pháp ngay lập tức.
Chuyển đổi tệp cấu hình JSON sang định dạng TOML giúp con người dễ dàng chỉnh sửa hơn trong khi vẫn giữ nguyên toàn bộ hệ thống phân cấp dữ liệu khóa-giá trị có cấu trúc.