پیکربندی TOML (.toml)
TOML استانداردزبان مینیمال آشکار تام (TOML) یک فرمت پیکربندی صریح و کاربرمحور است که توسط تام پرستون-ورنر، یکی از بنیانگذاران گیتهاب، ایجاد شده و در اکوسیستمهای برنامهنویسی مدرن از جمله Rust (Cargo) و Python (pyproject.toml) به طور گسترده پذیرفته شده است.
تبدیل TOML به JSON
مبدل رایگان TOML به JSON درون مرورگر. فایلها را فورا روی دستگاه خود تبدیل کنید.
بررسی و فراداده
سیستمعاملها و تحلیلگرهای فایل، فایلهای TOML را با بررسی توالی بایتهای دودویی ابتدایی شناسایی میکنند:
امضای هدر در سطح بایت (Magic Bytes)
سیستمعاملها و تحلیلگرهای فایل، فایلهای TOML را با بررسی توالی بایتهای دودویی ابتدایی شناسایی میکنند:
امضای HEX (آفست 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 |
| ترتیب بایتها (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 | تجزیه ضمنی رشته / تاریخ | هیچکدام (فقط رشته) | هیچکدام (فقط رشته) |
| پشتیبانی از نظرات (Comments) | بومی (نظرات با #) | بومی (نظرات با #) | نظرات مجاز نیستند | بومی (نظرات با ; و #) |
| اکوسیستم اصلی | Rust (Cargo)، Python (PEP 518)، Go | کوبرنتیز، انسیبل، خطوط لوله CI/CD | رابطهای برنامهنویسی وب، ارتباطات مرورگر | ویندوز قدیمی، پیکربندی Git |
حالتهای رایج خرابی و راهنمای بازیابی هگز
خطای تجزیهکننده: «کلید تکراری در جدول» یا «سربرگ جدول نامعتبر».
علت ریشهای: تلاش برای باز تعریف یک کلید موجود یا فضای نام جدول در داخل سند.
بازیابی: اعتبارسنجی و فرمت مجدد نحو TOML با استفاده از ابزار فرمتکننده TOML در File2File.
تحلیل امنیتی و بردارهای حمله تجزیهکننده (Parser)
تجزیهکنندههای TOML باید در برابر آلودگی پروتوتایپ (Prototype Pollution) و اتمام منابع پردازنده ناشی از تو در تویی غیرعادی آرایههای جدول محافظت شوند.
بردارهای حمله شناختهشده
- آلودگی پروتوتایپ در تجزیهکنندههای JavaScript TOML که ویژگیها را به Object.prototype تزریق میکند.
- حمله محرومیت از سرویس (DoS) از طریق اعلامیههای آرایه جدول بسیار تو در تو.
- تخصیص حافظه بیرویه هنگام تجزیه آرایههای درونخطی عظیم.
بهترین روشهای پدافندی:
تاریخچه و نقاط عطف
مزایا و نقاط قوت کلیدی
- کاملاً صریح و بدون ابهام: به طور تمیز و قابل پیشبینی روی یک جدول هش (Hash Table) با صفر نوعداده ناخواسته نگاشت میشود.
- پشتیبانی بومی درجه یک از تاریخ و زمان (مهر زمانی RFC 3339، تاریخها و زمانها) بدون نیاز به کاراکترهای گریز (Escaping).
- پذیرفته شده به عنوان فرمت پیکربندی استاندارد رسمی برای ابزارهای زبان مدرن (Cargo.toml در Rust، pyproject.toml در پایتون).
محدودیتها و معایب فنی
- درختهای شیء تو در تو و چندسطحی عمیق ممکن است در مقایسه با YAML بسیار طولانی و پرجزئیات شوند.
- نحو مربوط به آرایههای جدول ([[table.array]]) ممکن است برای افراد مبتدی غیرشهودی باشد.
- در مقایسه با JSON برای تبادل دادههای API ماشین به ماشین با سرعت بالا، حجم کمتری ندارد.
نکات فنی جالب
- زبان TOML توسط تام پرستون-ورنر ایجاد شد که او نیز گیتهاب را همبنیانگذاری کرده و Gravatar و SemVer (نسخهسازی معنایی) را پدید آورده است.
- فایل Cargo.toml در هر پروژه زبان Rust تمام وابستگیهای بسته و پرچمهای کامپایلر را در فرمت TOML مشخص میکند.
- برخلاف JSON، زبان TOML به طور بومی از نظرات (با استفاده از کاراکتر '#') و رشتههای چندخطی پشتیبانی میکند.
سوالات فنی متداول
TOML برای چه منظوری استفاده میشود؟
فرمت TOML برای پیکربندی نرمافزار، به ویژه در Cargo.toml زبان Rust، pyproject.toml زبان Python، تنظیمات Go Hugo و ابزارهای کانتینر استفاده میشود.
چرا TOML برای پیکربندی بر YAML ترجیح داده میشود؟
فرمت TOML از باگهای پارسینگ بدنام YAML (مانند تبدیل شدن عبارت بدون نقلقول 'NO' به مقدار بولی false) جلوگیری میکند، در حالی که با داشتن نظرات (Comments) و جداول واضح، برای انسان نیز کاملاً دوستانه و خوانا باقی میماند.
چگونه میتوانم TOML را به JSON یا YAML تبدیل کنم؟
شما میتوانید فایلهای TOML را با استفاده از File2File.app مستقیماً در مرورگر وب خود، فوراً به JSON یا YAML تبدیل کنید.
جفتهای تبدیل مرتبط با TOML
تبدیل فایلهای پیکربندی TOML به فرمت JSON، تنظیمات ویژگیهای کاربرپسند را به یک شیء دادهای دقیق ترجمه میکند که برنامههای وب میتوانند فوراً آن را تجزیه کنند.
تبدیل فایلهای پیکربندی JSON به فرمت TOML، ویرایش انسانی را ساده کرده و در عین حال تمام ساختارهای دادهای کلید-مقدار را حفظ میکند.