הגדרות YAML (.yaml)

YAML תקן

YAML Ain't Markup Language (YAML) הוא פורמט סריאליזציית הנתונים הדומיננטי עבור DevOps מודרני, תשתיות ענן (Kubernetes, Docker Compose) ואוטומציית CI/CD, תוך דגש על קריאות אנושית באמצעות הזחות רווחים נקיות.

המר YAML ל-JSON

ממיר חינמי מ-YAML ל-JSON פועל בדפדפן. המר קבצים באופן מיידי במכשיר שלך.

בדיקה ומטא-דאטה

מערכות הפעלה ומנתחי קבצים מזהים קבצי YAML על ידי בדיקת רצף הבייטים הבינארי הראשוני:

בחר או גרור קבצים לכאן

המרה פרטית ב-100% בתוך הדפדפן - הקבצים לעולם אינם עוזבים את המכשיר שלך

או הדבק Ctrl+V
הבטחת פרטיות ללא העברה ברשת: 0 בייט הועלו לשרתים חיצוניים. כל העיבוד מתבצע באופן מקומי בארגז החול של הדפדפן שלך.

חתימת כותרת ברמת הבייט (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
סגנון תחבירהיררכיית רווחי הזחהסוגריים ומרכאות קפדנייםטבלאות וצמדי מפתח=ערךתגי פתיחה/סגירה מרוצפים
תמיכה בהערותמובנית (הערות #)הערות אינן מותרותמובנית (הערות #)<!-- הערות -->
אימוץ ב-DevOpsתקן אוניברסלי (Kubernetes, CI/CD)תקן API אוניברסליהגדרות חבילה של Rust/Pythonהגדרות מדור קודם ארגוניות
שימוש חוזר בנתוניםעוגנים מובנים (&) וכינויים (*)ללא (כפילות ידנית)ללא (כפילות ידנית)ישויות XML

מצבי שיחשות נפוצים ומדריך שחזור הקסדצימלי (Hex)

שגיאת מנתח: 'mapping values are not allowed here' או שגיאת הזחה.

גורם שורש: ערבוב של טאבים עם רווחים או רמות הזחה לא מיושרות.

התאוששות: המר טאבים לרווחים ואמת את התחביר באמצעות מעצב ה-YAML של File2File.

ניתוח אבטחה ווקטורי התקפה על מנתחים (Parsers)

מנתחי YAML שתומכים בתגי טיפוס מותאמים אישית (כמו 'yaml.load()' של PyYAML) אפשרו היסטורית הרצת קוד מרחוק באמצעות יצירת אובייקטים שרירותיים.

ווקטורי תקיפה ידועים

  • היקסט קוד שרירותי באמצעות תגי דסריאליזציה לא מאובטחים של אובייקטים (למשל '!!python/object/apply').
  • פצצות הרחבת ישויות (המקבילה של 'מיליארד צחוקים' המשתמשת בעוגנים ובכינויים של YAML).
  • פגיעויות בבלבול טיפוסים עקב ניתוח משתמע של ערכים בוליאניים ותאריכים.

השיטות המומלצות להגנה:

היסטוריה ואבני דרך

2021פורסמה הגרסה המתוקנת YAML 1.2.2, ששיפרה את התאימות ל-JSON ואת הגדרות הדקדוק הפורמליות.
2009YAML 1.2 מגדיר את YAML כתקן-על קפדני של JSON, כלומר כל קובץ JSON תקף הוא גם קובץ YAML תקף.
2001קלארק אוונס (Clark Evans), אינגי דוט נט (Ingy döt Net) ואורן בן-קיקי (Oren Ben-Kiki) יוצרים את YAML כאלטרנטיבה ידידותית למשתמש אנושי במקום XML.

יתרונות מרכזיים

  • התקן הבלתי מעורער לתשתיות ענן מודרניות: בשימוש אוניברסלי במניפסטים של Kubernetes, ב-Docker Compose וב-GitHub Actions.
  • תחביר נקי וקריא: מבטל את העומס של סוגריים מסולסלים, מרובעים ומרכאות באמצעות הזחה אינטואיטיבית.
  • תומך בהפניות ועוגנים (&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 ישירות בדפדפן האינטרנט שלך תוך שמירה על פרטיות מלאה.