הגדרות YAML (.yaml)
YAML תקןYAML Ain't Markup Language (YAML) הוא פורמט סריאליזציה דומיננטי של נתונים עבור DevOps מודרני, תשתיות ענן (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
מפרט טכני
| מבנה המכולה | פורמט סריאליזציה של נתונים המבוסס על הזחה ונוח לקריאה, שהוא הרחבה של JSON ותומך בעוגנים ובכינויים |
| דחיסה | זרם טקסט לא דחוס |
| סדר בתים (Endianness) | זרם טקסט UTF-8 / Unicode |
| מרחבי צבע | לא רלוונטי (סריאליזציה של נתונים) |
| ערוצים ומבנה | מיפויים (מילוני מפתח-ערך), רצפים (רשימות), ערכים סקלריים (מחרוזות, מספרים וערכים בוליאניים), ועוגנים (&ref/*ref) |
| ממדים מרביים | גודל מסמך ללא מגבלה קבועה (תומך בזרמים של כמה מסמכים, המופרדים באמצעות '---') |
| שקיפות | אין |
| הזרמה ופרוגרסיביות | זרמים של כמה מסמכים מאפשרים לעבד מסמך אחר מסמך לפי הסדר |
מטריצת השוואה טכנית: YAML מול מתחרים
| תכונה טכנית | YAML (נוכחי) | JSON | TOML | XML |
|---|---|---|---|---|
| סגנון תחביר | היררכיה המבוססת על הזחה ורווחים | סוגריים ומרכאות קפדניים | טבלאות וצמדי מפתח=ערך | תגי פתיחה וסגירה מפורטים |
| תמיכה בהערות | מובנית (הערות #) | הערות אינן מותרות | מובנית (הערות #) | <!-- הערות --> |
| אימוץ ב-DevOps | התמיכה משתנה בין תוכנות. | התמיכה משתנה בין תוכנות. | הגדרות חבילה של Rust/Python | הגדרות מדור קודם ארגוניות |
| שימוש חוזר בנתונים | עוגנים מובנים (&) וכינויים (*) | ללא (כפילות ידנית) | ללא (כפילות ידנית) | ישויות XML |
מצבי השחתה נפוצים ומדריך שחזור הקסדצימלי (Hex)
שגיאת מנתח: 'mapping values are not allowed here' או שגיאת הזחה.
גורם שורש: ערבוב של טאבים עם רווחים או רמות הזחה לא מיושרות.
שחזור: המר טאבים לרווחים ואמת את התחביר באמצעות מעצב ה-YAML של File2File.app.
ניתוח אבטחה ווקטורי תקיפה נגד מנתחי פורמטים (parsers)
מנתחי YAML שתומכים בתגי טיפוס מותאמים אישית (כמו 'yaml.load()' של PyYAML) אפשרו היסטורית הרצת קוד מרחוק באמצעות יצירת אובייקטים שרירותיים.
ווקטורי תקיפה ידועים
- הרצת קוד שרירותי באמצעות תגי דסריאליזציה לא מאובטחים של אובייקטים (למשל '!!python/object/apply').
- פצצות הרחבת ישויות (המקבילה של 'מיליארד צחוקים' המשתמשת בעוגנים ובכינויים של YAML).
- פגיעויות בבלבול טיפוסים עקב ניתוח משתמע של ערכים בוליאניים ותאריכים.
שיטות מומלצות להגנה: השתמש תמיד במנתחי YAML בטוחים ('yaml.safe_load()' ב-Python) ואכוף מגבלות על עומק הרחבת העוגנים.
היסטוריה ואבני דרך
יתרונות מרכזיים
- YAML נפוץ בכלי תשתית, אך התמיכה וההתנהגות משתנות בין מימושים.
- תחביר נקי וקריא: מבטל את העומס של סוגריים מסולסלים, מרובעים ומרכאות באמצעות הזחה אינטואיטיבית.
- תומך בהפניות ועוגנים (&anchor / *anchor) כדי לעשות שימוש חוזר בלוקי הגדרות חוזרים ללא כפילות.
מגבלות טכניות וחסרונות
- רגיש לתווים לבנים (whitespace): תו טאב מקרי או רווח נוסף עלולים לשבש את היררכיית המסמך או לגרום לשגיאות ניתוח.
- באגי המרת טיפוסים ידועים לשמצה: מילים ללא מרכאות כמו 'no', 'on', 'yes', או קודי מדינות ('NO' עבור נורווגיה) עשויים להפוך בשקט לבוליאניים.
- מהירות ניתוח איטית משמעותית בהשוואה לפורמטים בינאריים או ל-JSON קפדני.
עובדות טכניות מעניינות
- YAML עמד במקור עבור 'Yet Another Markup Language', אך שונה בהומור לשם ראשי התיבות הרקורסיבי 'YAML Ain't Markup Language' כדי להדגיש את סריאליזציית הנתונים.
- 'בעיית נורווגיה' (The Norway Problem) היא באג תכנותי מפורסם שבו קוד המדינה 'NO' בקובץ YAML פוענח כערך הבוליאני 'false'.
- כל קובץ JSON תקף בעולם הוא בו-זמנית גם קובץ YAML תקף ב-100%.
שאלות טכניות נפוצות
למה משמש YAML?
YAML הוא שפת התצורה הראשית עבור מחשוב ענן, פריסת אשכולות Kubernetes, קובצי Docker Compose, זרימות עבודה של GitHub Actions והגדרות תוכנה.
האם אני יכול להשתמש בטאבים (tabs) בקובצי YAML?
לא. מפרט ה-YAML הרשמי אוסר בתכלית האיסור על שימוש בתווי טאב לצורך הזחה (indentation); עליך להשתמש תמיד ברווחים (בדרך כלל 2 רווחים לכל רמה).
איך אוכל להמיר YAML ל-JSON?
ניתן להמיר קובצי YAML ל-JSON נקי ומאומת בלחיצת כפתור אחת באמצעות File2File.app ישירות בדפדפן האינטרנט שלך תוך שמירה על פרטיות מלאה.