การตั้งค่า TOML (.toml)
TOML มาตรฐานTom's Obvious Minimal Language (TOML) คือรูปแบบการกำหนดค่าที่ชัดเจนและมุ่งเน้นมนุษย์เป็นศูนย์กลาง สร้างขึ้นโดย Tom Preston-Werner ผู้ร่วมก่อตั้ง GitHub ซึ่งได้รับการยอมรับอย่างแพร่หลายในระบบนิเวศการเขียนโปรแกรมสมัยใหม่ เช่น Rust (Cargo) และ Python (pyproject.toml)
แปลง TOML เป็น JSON
ตัวแปลงจาก TOML เป็น JSON ฟรีในเบราว์เซอร์ แปลงไฟล์ได้ทันทีบนอุปกรณ์ของคุณ
ตรวจสอบและดู Metadata
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ TOML โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็นส่วนหัวในระดับไบต์ (Magic Bytes)
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ TOML โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็น HEX (OFFSET 0):
5B ... 5Dการแสดงผลรูปแบบ ASCII: [...]
มาตรฐาน: TOML v1.0.0 Specification
ข้อมูลจำเพาะทางเทคนิค
| สถาปัตยกรรมคอนเทนเนอร์ | Human-readable configuration file mapping unequivocally to a hash table, structured with [tables] and key = value pairs |
| การบีบอัด | Uncompressed text stream |
| การจัดลำดับไบต์ (Byte Endianness) | UTF-8 text stream |
| พื้นที่สี | N/A (Configuration File) |
| ช่องสัญญาณและโครงสร้าง | Tables, arrays of tables, inline tables, strings, integers, floats, booleans, and RFC 3339 datetimes |
| ขนาดสูงสุด | Unbounded text length |
| ความโปร่งใส | None |
| การสตรีมและแบบโปรเกรสซีฟ | Sequential line-by-line configuration parsing |
ตารางเปรียบเทียบทางเทคนิค: TOML กับคู่แข่ง
| คุณลักษณะทางเทคนิค | TOML (ปัจจุบัน) | YAML | JSON | INI |
|---|---|---|---|---|
| ความเสี่ยงจากความคลุมเครือ | ศูนย์ (ข้อกำหนดชัดเจนอย่างเคร่งครัด) | สูง (บั๊กค่าบูลีน 'ปัญหาจอร์เวย์' ของ YAML) | ศูนย์ (ประเภทข้อมูลที่เข้มงวด) | ปานกลาง (ไม่มีมาตรฐานที่เป็นทางการ) |
| ประเภทข้อมูลวันที่และเวลาแบบเนทีฟ | รองรับวันที่และเวลาตามมาตรฐาน RFC 3339 แบบเนทีฟ | การแยกวิเคราะห์สตริง / วันที่โดยนัย | ไม่มี (มีแต่สตริง) | ไม่มี (มีแต่สตริง) |
| การรองรับความคิดเห็น | แบบเนทีฟ (ความคิดเห็นแบบ #) | แบบเนทีฟ (ความคิดเห็นแบบ #) | ไม่อนุญาตให้มีความคิดเห็น | แบบเนทีฟ (ความคิดเห็นแบบ ; และ #) |
| ระบบนิเวศหลัก | Rust (Cargo), Python (PEP 518), Go | Kubernetes, Ansible, ท่อส่ง CI/CD | เว็บ API, การสื่อสารในเบราว์เซอร์ | Windows รุ่นเก่า, การกำหนดค่า Git |
รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex
ข้อผิดพลาดของตัวแยกวิเคราะห์: 'Duplicate key in table' หรือ 'Invalid table header'
สาเหตุหลัก: พยายามกำหนดคีย์หรือเนมสเปซของตารางที่มีอยู่แล้วซ้ำภายในเอกสาร
การกู้คืน: ตรวจสอบความถูกต้องและจัดรูปแบบไวยากรณ์ TOML ใหม่โดยใช้ตัวจัดรูปแบบ TOML ของ File2File
การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์
ตัวแยกวิเคราะห์ TOML ต้องป้องกันมลพิษของต้นแบบ (prototype pollution) และการใช้ CPU จนหมดสิ้นจากการซ้อนอาร์เรย์ตารางที่ผิดปกติ
เวกเตอร์การโจมตีที่ทราบ
- มลพิษของต้นแบบในตัวแยกวิเคราะห์ JavaScript TOML ที่ฉีดคุณสมบัติเข้าไปใน Object.prototype
- การปฏิเสธการให้บริการผ่านการประกาศอาร์เรย์ตารางที่ซ้อนกันลึก
- การจัดสรรหน่วยความจำที่ไม่จำกัดในระหว่างการแยกวิเคราะห์อาร์เรย์แบบอินไลน์ขนาดใหญ่
แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน:
ประวัติความเป็นมาและเหตุการณ์สำคัญ
ข้อได้เปรียบและจุดเด่นสำคัญ
- ไร้ความคลุมเครือโดยสิ้นเชิง: จับคู่กับตารางแฮชได้อย่างสะอาดและคาดเดาได้ โดยไม่มีการแปลงประเภทข้อมูลที่น่าประหลาดใจ
- รองรับวันที่และเวลาแบบเนทีฟระดับเฟิร์สต์คลาส (การประทับเวลา, วันที่, และเวลาตามมาตรฐาน RFC 3339) โดยไม่ต้องหลีกเลี่ยงอักขระ (escaping)
- ถูกนำมาใช้เป็นรูปแบบการกำหนดค่ามาตรฐานอย่างเป็นทางการสำหรับเครื่องมือภาษาสัยใหม่ (Rust Cargo.toml, Python pyproject.toml)
ข้อจำกัดทางเทคนิคและข้อควรพิจารณา
- โครงสร้างออบเจ็กต์หลายระดับที่ซ้อนกันลึกอาจทำให้ข้อความยาวเกินไปเมื่อเทียบกับ YAML
- ไวยากรณ์สำหรับอาร์เรย์ของตาราง ([[table.array]]) อาจไม่เข้าใจได้ง่ายสำหรับผู้เริ่มต้น
- มีความหนาแน่นน้อยกว่า JSON สำหรับการแลกเปลี่ยนข้อมูล API แบบเครื่องต่อเครื่องที่มีปริมาณงานสูง
เกร็ดความรู้ทางเทคนิคที่น่าสนใจ
- TOML ถูกสร้างขึ้นโดย Tom Preston-Werner ผู้ซึ่งร่วมก่อตั้ง GitHub และสร้าง Gravatar รวมถึง SemVer (Semantic Versioning)
- ไฟล์ 'Cargo.toml' ในโปรเจกต์ Rust ทุกโปรเจกต์จะระบุการพึ่งพาแพ็คเกจและแฟล็กตัวคอมไพล์ทั้งหมดในรูปแบบ TOML
- ต่างจาก JSON ตรงที่ TOML รองรับความคิดเห็น (โดยใช้เครื่องหมาย '#') และสตริงหลายบรรทัดได้ในตัว
คำถามทางเทคนิคที่พบบ่อย
TOML ใช้ทำอะไร
TOML ใช้สำหรับการกำหนดค่าซอฟต์แวร์ โดยส่วนใหญ่จะพบใน Cargo.toml ของ Rust, pyproject.toml ของ Python, การตั้งค่า Go Hugo และเครื่องมือคอนเทนเนอร์
เหตุใดจึงนิยมใช้ TOML มากกว่า YAML สำหรับการกำหนดค่า
TOML หลีกเลี่ยงบั๊กการแยกวิเคราะห์ที่เป็นที่เลื่องลือของ YAML (เช่น คำว่า 'NO' ที่ไม่ได้ใส่เครื่องหมายคำพูดกลายเป็นค่าบูลีน false) ในขณะที่ยังคงเป็นมิตรกับผู้ใช้ด้วยความคิดเห็นและตารางที่ชัดเจน
ฉันจะแปลง TOML เป็น JSON หรือ YAML ได้อย่างไร
คุณสามารถแปลงไฟล์ TOML เป็น JSON หรือ YAML ได้ทันทีโดยใช้ File2File.app บนเว็บเบราว์เซอร์ของคุณ
คู่การแปลงไฟล์ TOML ที่เกี่ยวข้อง
การแปลงไฟล์ตั้งค่า TOML ให้เป็นรูปแบบ JSON จะเปลี่ยนการตั้งค่าคุณสมบัติที่เป็นมิตรต่อมนุษย์ให้กลายเป็นออบเจ็กต์ข้อมูลที่เข้มงวด ซึ่งแอปพลิเคชันเว็บสามารถแยกวิเคราะห์ได้ทันที
การแปลงไฟล์คอนฟิกูเรชัน JSON เป็นรูปแบบ TOML ช่วยให้การแก้ไขด้วยมนุษย์ง่ายขึ้น พร้อมทั้งรักษาลำดับชั้นข้อมูลคีย์-แวลูที่มีโครงสร้างไว้ครบถ้วน