Cấu hình TOML (.toml)

TOML Tiêu chuẩn

Tom'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ọn hoặc thả tệp vào đây

Chuyển đổi 100% riêng tư trong trình duyệt - tệp không bao giờ rời khỏi thiết bị của bạn

hoặc dán Ctrl+V
Cam kết bảo mật không truyền tải qua mạng: 0 byte được tải lên máy chủ bên ngoài. Toàn bộ quá trình xử lý diễn ra cục bộ trong hộp cát trình duyệt của bạn.

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 ... 5D

BIỂ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 ContainerHuman-readable configuration file mapping unequivocally to a hash table, structured with [tables] and key = value pairs
NénUncompressed text stream
Thứ tự byte EndiannessUTF-8 text stream
Không gian màuN/A (Configuration File)
Kênh & Cấu trúcTables, arrays of tables, inline tables, strings, integers, floats, booleans, and RFC 3339 datetimes
Kích thước tối đaUnbounded text length
Độ trong suốtNone
Truyền phát & Tăng dầnSequential 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ậtTOML (Hiện tại)YAMLJSONINI
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ảnHỗ trợ ngày & giờ nguyên bản theo chuẩn RFC 3339Phân tích cú pháp chuỗi / ngày ngầm địnhKhông có (chỉ có chuỗi)Không có (chỉ có chuỗi)
Hỗ trợ chú thíchNguyên bản (chú thích #)Nguyên bản (chú thích #)Không cho phép chú thíchNguyên bản (chú thích ; và #)
Hệ sinh thái chínhRust (Cargo), Python (PEP 518), GoKubernetes, Ansible, quy trình CI/CDWeb API, giao tiếp trình duyệtWindows 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

2021TOML v1.0.0 chính thức phát hành, đóng băng đặc tả cú pháp cốt lõi.
2018Python tiêu chuẩn hóa 'pyproject.toml' (PEP 518) làm tiêu chuẩn cấu hình bản dựng hiện đại.
2013Tom Preston-Werner công bố TOML để cung cấp một định dạng cấu hình sạch sẽ mà không có độ phức tạp của YAML.

Ư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.