پیکربندی YAML (.yaml)
YAML استانداردزبان YAML Ain't Markup Language (YAML) فرمت غالب برای سریالسازی دادهها در دواپس مدرن، زیرساخت ابری (Kubernetes، Docker Compose) و اتوماسیون CI/CD است که بر خوانایی انسان از طریق تورفتگیهای تمیز با فضای خالی تأکید دارد.
تبدیل YAML به JSON
مبدل رایگان YAML به JSON درون مرورگر. فایلها را فورا روی دستگاه خود تبدیل کنید.
بررسی و فراداده
سیستمعاملها و تحلیلگرهای فایل، فایلهای YAML را با بررسی توالی بایتهای دودویی ابتدایی شناسایی میکنند:
امضای هدر در سطح بایت (Magic Bytes)
سیستمعاملها و تحلیلگرهای فایل، فایلهای YAML را با بررسی توالی بایتهای دودویی ابتدایی شناسایی میکنند:
امضای HEX (آفست 0):
2D 2D 2D 0Aنمایش ASCII: ---\n
استانداردسازی: YAML 1.2.2 Specification
مشخصات فنی
| معماری کانتینر | Indentation-based human-friendly data serialization format superset of JSON supporting anchors and aliases |
| فشردهسازی | Uncompressed text stream |
| ترتیب بایتها (Endianness) | UTF-8 / Unicode text stream |
| فضاهای رنگی | N/A (Data Serialization) |
| کانالها و ساختار | Mappings (key-value dictionaries), sequences (lists), scalar types (strings, numbers, booleans), and anchors (&ref/*ref) |
| حداکثر ابعاد | Unbounded document size (supports multi-document streams separated by '---') |
| شفافیت مشخصات | None |
| استریمینگ و پیشرونده | Multi-document streams allow sequential document-by-document processing |
ماتریس مقایسه فنی: YAML در برابر رقبا
| ویژگی فنی | YAML (فعلی) | JSON | TOML | XML |
|---|---|---|---|---|
| سبک نحو | سلسلهمراتب فاصلههای خالی تورفتگی | براکتها و نقلقولهای سختگیرانه | جداول و جفتهای کلید=مقدار | برچسبهای باز و بسته طولانی و پرجزئیات |
| پشتیبانی از نظرات (Comments) | بومی (نظرات با #) | نظرات مجاز نیستند | بومی (نظرات با #) | <!-- نظرات --> |
| پذیرش در دواپس | استاندارد جهانی (کوبرنتیز، CI/CD) | استاندارد جهانی API | پیکربندی بسته Rust/Python | پیکربندی قدیمی سازمانی |
| استفاده مجدد از دادهها | لنگرهای بومی (&) و نامهای مستعار (*) | هیچکدام (تکثیر دستی) | هیچکدام (تکثیر دستی) | نهادهای XML (Entities) |
حالتهای رایج خرابی و راهنمای بازیابی هگز
خطای تجزیهکننده: «مقادیر نگاشت در اینجا مجاز نیستند» یا خطای تورفتگی.
علت ریشهای: ترکیب تبها با فضاهای خالی (Spaces) یا سطوح تورفتگی نامتعادل.
بازیابی: تبدیل تبها به فضای خالی و اعتبارسنجی نحو با استفاده از ابزار فرمتکننده YAML در File2File.
تحلیل امنیتی و بردارهای حمله تجزیهکننده (Parser)
تجزیهکنندههای YAML که از برچسبهای نوع سفارشی پشتیبانی میکنند (مانند 'yaml.load()' در PyYAML) از نظر تاریخی اجازه اجرای کد از راه دور را از طریق نمونهسازی خودسرانه اشیاء میدادند.
بردارهای حمله شناختهشده
- اجرای کد خودسرانه از طریق برچسبهای ناامن در سریالزدایی اشیاء (مانند '!!python/object/apply').
- بمبهای گسترش موجودیت (معادل میلیاردها خنده با استفاده از لنگرها و نامهای مستعار YAML).
- آسیبپذیریهای سردرگمی نوعداده به دلیل تجزیه ضمنی مقادیر بولی و زمانسنجی.
بهترین روشهای پدافندی:
تاریخچه و نقاط عطف
مزایا و نقاط قوت کلیدی
- استاندارد بیرقیب برای زیرساخت ابری مدرن: به طور جهانی در مانیفستهای کوبرنتیز، Docker Compose و GitHub Actions استفاده میشود.
- نحو تمیز و خوانا: با استفاده از تورفتگیهای شهودی، شلوغی آکولادها، براکتها و نقلقولها را از بین میبرد.
- از ارجاعها و لنگرها (&anchor / *anchor) برای استفاده مجدد از بلوکهای پیکربندی تکراری بدون تکثیر پشتیبانی میکند.
محدودیتها و معایب فنی
- حساس به فاصله خالی (Whitespace): یک تب تصادفی یا یک فضای خالی اضافی میتواند سلسلهمراتب سند را خراب کند یا باعث خطای تجزیه شود.
- خطاهای بدنام نوعداده ضمنی: کلمات بدون نقلقول مانند 'no'، 'on'، 'yes' یا کدهای کشور ('NO' برای نوروژ) میتوانند به طور خودکار به مقادیر بولی تبدیل شوند.
- سرعت تجزیه به طور قابل توجهی کندتر در مقایسه با فرمتهای باینری یا JSON سختگیرانه.
نکات فنی جالب
- عبارت YAML در ابتدا مخفف 'Yet Another Markup Language' بود، اما به شوخی به مخفف بازگشتی 'YAML Ain't Markup Language' تغییر نام داد تا بر سریالسازی دادهها تأکید کند.
- «مسئله نروژ» یک باگ معروف برنامهنویسی است که در آن کد کشور 'NO' در یک فایل YAML به عنوان مقدار بولی 'false' تجزیه شد.
- هر فایل معتبر JSON در دنیا همزمان یک فایل ۱۰۰ درصد معتبر YAML نیز هست.
سوالات فنی متداول
YAML برای چه منظوری استفاده میشود؟
فرمت YAML زبان پیکربندی اصلی برای رایانش ابری، استقرار خوشههای Kubernetes، فایلهای Docker Compose، گردش کارهای GitHub Actions و تنظیمات نرمافزار است.
آیا میتوانم از تگها (Tab) در فایلهای YAML استفاده کنم؟
خیر. مشخصات رسمی YAML به شدت استفاده از کاراکترهای تب را برای تورفتگی (Indentation) ممنوع میکند؛ شما همیشه باید از فاصله (Space) استفاده کنید (معمولاً ۲ فاصله برای هر سطح).
چگونه میتوانم YAML را به JSON تبدیل کنم؟
شما میتوانید فایلهای YAML را با استفاده از File2File.app مستقیماً در مرورگر وب خود و با حفظ کامل حریم خصوصی، با یک کلیک به JSON تمیز و تأییدشده تبدیل کنید.
جفتهای تبدیل مرتبط با YAML
تبدیل فایلهای پیکربندی YAML به فرمت JSON، ساختارهای متنی فرورفته و خوانا برای انسان را به اشیاء دقیق و قابل تجزیه ماشینی برای برنامههای وب تبدیل میکند.
تبدیل فایلهای پیکربندی JSON به فرمت YAML، ساختارهای دادهای سفت و سخت برنامهنویسی را به اسناد تمیز و قابل خواندن توسط انسان تبدیل میکند که ویرایش آنها برای مدیران سیستم بسیار آسانتر است.