پیکربندی YAML (.yaml)

YAML استاندارد

زبان YAML Ain't Markup Language (YAML) فرمت غالب برای سریال‌سازی داده‌ها در دواپس مدرن، زیرساخت ابری (Kubernetes، Docker Compose) و اتوماسیون CI/CD است که بر خوانایی انسان از طریق تورفتگی‌های تمیز با فضای خالی تأکید دارد.

تبدیل YAML به JSON

مبدل رایگان YAML به JSON درون مرورگر. فایل‌ها را فورا روی دستگاه خود تبدیل کنید.

بررسی و فراداده

سیستم‌عامل‌ها و تحلیلگرهای فایل، فایل‌های YAML را با بررسی توالی بایت‌های دودویی ابتدایی شناسایی می‌کنند:

انتخاب یا رها کردن فایل‌ها در اینجا

تبدیل ۱۰۰٪ خصوصی در مرورگر - فایل‌ها هرگز دستگاه شما را ترک نمی‌کنند

یا جای‌گذاری کنید Ctrl+V
تضمین حریم خصوصی بدون انتقال شبکه: صفر بایت به سرورهای خارجی آپلود می‌شود. تمام پردازش‌ها به صورت محلی در سندباکس مرورگر شما انجام شد.

امضای هدر در سطح بایت (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 (فعلی)JSONTOMLXML
سبک نحوسلسله‌مراتب فاصله‌های خالی تورفتگیبراکت‌ها و نقل‌قول‌های سخت‌گیرانهجداول و جفت‌های کلید=مقداربرچسب‌های باز و بسته طولانی و پرجزئیات
پشتیبانی از نظرات (Comments)بومی (نظرات با #)نظرات مجاز نیستندبومی (نظرات با #)<!-- نظرات -->
پذیرش در دواپساستاندارد جهانی (کوبرنتیز، CI/CD)استاندارد جهانی APIپیکربندی بسته Rust/Pythonپیکربندی قدیمی سازمانی
استفاده مجدد از داده‌هالنگرهای بومی (&) و نام‌های مستعار (*)هیچ‌کدام (تکثیر دستی)هیچ‌کدام (تکثیر دستی)نهادهای XML (Entities)

حالت‌های رایج خرابی و راهنمای بازیابی هگز

خطای تجزیه‌کننده: «مقادیر نگاشت در اینجا مجاز نیستند» یا خطای تورفتگی.

علت ریشه‌ای: ترکیب تب‌ها با فضاهای خالی (Spaces) یا سطوح تورفتگی نامتعادل.

بازیابی: تبدیل تب‌ها به فضای خالی و اعتبارسنجی نحو با استفاده از ابزار فرمت‌کننده YAML در File2File.

تحلیل امنیتی و بردارهای حمله تجزیه‌کننده (Parser)

تجزیه‌کننده‌های YAML که از برچسب‌های نوع سفارشی پشتیبانی می‌کنند (مانند 'yaml.load()' در PyYAML) از نظر تاریخی اجازه اجرای کد از راه دور را از طریق نمونه‌سازی خودسرانه اشیاء می‌دادند.

بردارهای حمله شناخته‌شده

  • اجرای کد خودسرانه از طریق برچسب‌های ناامن در سریال‌زدایی اشیاء (مانند '!!python/object/apply').
  • بمب‌های گسترش موجودیت (معادل میلیاردها خنده با استفاده از لنگرها و نام‌های مستعار YAML).
  • آسیب‌پذیری‌های سردرگمی نوع‌داده به دلیل تجزیه ضمنی مقادیر بولی و زمان‌سنجی.

بهترین روش‌های پدافندی:

تاریخچه و نقاط عطف

2021نسخه تجدیدنظر شده YAML 1.2.2 منتشر شد که سازگاری با JSON و تعاریف دستور زبان رسمی را بهبود بخشید.
2009YAML 1.2، زبان YAML را به عنوان یک ابرمجموعه سخت‌گیرانه از JSON استاندارد کرد، به این معنی که تمام فایل‌های معتبر JSON در عین حال YAML معتبر هستند.
2001کلارک ایوانز، اینگی دوت نت (Ingy döt Net) و اورن بن-یکی، YAML را به عنوان جایگزینی کاربرپسند برای XML ایجاد کردند.

مزایا و نقاط قوت کلیدی

  • استاندارد بی‌رقیب برای زیرساخت ابری مدرن: به طور جهانی در مانیفست‌های کوبرنتیز، 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 تمیز و تأییدشده تبدیل کنید.