การตั้งค่า YAML (.yaml)

YAML มาตรฐาน

YAML Ain't Markup Language (YAML) คือรูปแบบการจัดเรียงข้อมูลแบบอนุกรมหลักสำหรับ DevOps สมัยใหม่ โครงสร้างพื้นฐานคลาวด์ (Kubernetes, Docker Compose) และระบบอัตโนมัติ CI/CD โดยเน้นความสามารถในการอ่านออกเสียงและเข้าใจได้ง่ายสำหรับมนุษย์ผ่านการเว้นวรรคย่อหน้า

แปลง YAML เป็น JSON

ตัวแปลงจาก YAML เป็น JSON ฟรีในเบราว์เซอร์ แปลงไฟล์ได้ทันทีบนอุปกรณ์ของคุณ

ตรวจสอบและดู Metadata

ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ YAML โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:

เลือกหรือวางไฟล์ที่นี่

การแปลงไฟล์แบบส่วนตัว 100% ในเบราว์เซอร์ - ไฟล์จะไม่ rời ออกจากอุปกรณ์ของคุณ

หรือวาง Ctrl+V
การรับประกันความเป็นส่วนตัวแบบไม่มีการส่งผ่านเครือข่าย: อัปโหลด 0 ไบต์ไปยังเซิร์ฟเวอร์ภายนอก การประมวลผลทั้งหมดเกิดขึ้นภายในแซนด์บ็อกซ์ของเบราว์เซอร์ของคุณ

ลายเซ็นส่วนหัวในระดับไบต์ (Magic Bytes)

ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ YAML โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:

ลายเซ็น HEX (OFFSET 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
การจัดลำดับไบต์ (Byte 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' หรือข้อผิดพลาดเรื่องการเยื้องย่อหน้า

สาเหตุหลัก: การผสมผสานระหว่างปุ่ม Tab กับช่องว่าง หรือระดับการเยื้องย่อหน้าที่ไม่ตรงกัน

การกู้คืน: แปลง Tab เป็นช่องว่างและตรวจสอบความถูกต้องของไวยากรณ์โดยใช้ File2File YAML Formatter

การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์

ตัวแยกวิเคราะห์ YAML ที่รองรับแท็กชนิดข้อมูลแบบกำหนดเอง (เช่น 'yaml.load()' ของ PyYAML) ในอดีตเคยอนุญาตให้มีการเรียกใช้โค้ดระยะไกลผ่านการสร้างอินสแตนซ์วัตถุตามอำเภอใจ

เวกเตอร์การโจมตีที่ทราบ

  • การเรียกใช้โค้ดตามอำเภอใจผ่านแท็กการแปลงข้อมูลวัตถุที่ไม่ปลอดภัย (เช่น '!!python/object/apply')
  • การระเบิดจากการขยายเอนทิตี (เทียบเท่ากับ billion laughs โดยใช้แองเคอร์และนามแฝงของ YAML)
  • ช่องโหว่ความสับสนของชนิดข้อมูลเนื่องจากการแยกวิเคราะห์ค่าบูลีนและประทับเวลาโดยปริยาย

แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน:

ประวัติความเป็นมาและเหตุการณ์สำคัญ

2021การแก้ไขปรับปรุง YAML 1.2.2 ได้รับการเผยแพร่ โดยปรับปรุงความเข้ากันได้กับ JSON และนิยามไวยากรณ์อย่างเป็นทางการ
2009YAML 1.2 กำหนดมาตรฐานให้ YAML เป็นส่วนขยายที่เคร่งครัดของ JSON ซึ่งหมายความว่า JSON ที่ถูกต้องทั้งหมดจะถือเป็น YAML ที่ถูกต้องเช่นกัน
2001Clark Evans, Ingy döt Net และ Oren Ben-Kiki สร้าง YAML ขึ้นมาเป็นทางเลือกที่เป็นมิตรต่อมนุษย์แทนที่ XML

ข้อได้เปรียบและจุดเด่นสำคัญ

  • มาตรฐานที่ไม่มีใครเทียบได้สำหรับโครงสร้างพื้นฐานคลาวด์สมัยใหม่: ใช้กันอย่างแพร่หลายใน Kubernetes manifests, Docker Compose และ GitHub Actions
  • ไวยากรณ์สะอาดและอ่านง่าย: กำจัดความรกของวงปีกกา วงเล็บเหลี่ยม และเครื่องหมายคำพูดผ่านการเยื้องย่อหน้าที่ใช้งานง่าย
  • รองรับการอ้างอิงและแองเคอร์ (&anchor / *anchor) เพื่อนำบล็อกการกำหนดค่าที่ซ้ำกันกลับมาใช้ใหม่โดยไม่ต้องทำซ้ำ

ข้อจำกัดทางเทคนิคและข้อควรพิจารณา

  • ไวต่อช่องว่าง (Whitespace): การเผลอกดปุ่ม Tab หรือการใส่เว้นวรรคเกินมาเพียงตัวเดียวอาจทำให้ลำดับชั้นของเอกสารเสียหายหรือทำให้เกิดข้อผิดพลาดในการแยกวิเคราะห์ได้
  • ข้อบกพร่องเรื่องการแปลงชนิดข้อมูลที่มีชื่อเสียง: คำที่ไม่ได้ใส่เครื่องหมายคำพูด เช่น 'no', 'on', 'yes' หรือรหัสประเทศ ('NO' สำหรับนอร์เวย์) อาจกลายเป็นค่าบูลีนโดยปริยาย
  • ความเร็วในการแยกวิเคราะห์ช้ากว่ารูปแบบไบนารีหรือ JSON อย่างเห็นได้ชัด

เกร็ดความรู้ทางเทคนิคที่น่าสนใจ

  • เดิมที YAML ย่อมาจาก 'Yet Another Markup Language' แต่ถูกเปลี่ยนชื่อแบบติดตลกเป็นคำย่อแบบเรียกซ้ำว่า 'YAML Ain't Markup Language' เพื่อเน้นย้ำถึงการจัดเรียงข้อมูลแบบอนุกรม
  • ปัญหานอร์เวย์ ('Norway Problem') เป็นบั๊กการเขียนโปรแกรมที่มีชื่อเสียง ซึ่งรหัสประเทศ 'NO' ในไฟล์ YAML ถูกตีความว่าเป็นค่าบูลีน 'false'
  • ไฟล์ JSON ที่ถูกต้องทุกไฟล์ในโลกนี้ยังเป็นไฟล์ YAML ที่ถูกต้อง 100% พร้อมกันด้วย

คำถามทางเทคนิคที่พบบ่อย

YAML ใช้ทำอะไร

YAML เป็นภาษาการกำหนดค่าหลักสำหรับการประมวลผลบนคลาวด์ การปรับใช้คลัสเตอร์ Kubernetes ไฟล์ Docker Compose เวิร์กฟลอยด์ GitHub Actions และการตั้งค่าซอฟต์แวร์

ฉันสามารถใช้แท็บ (Tabs) ในไฟล์ YAML ได้หรือไม่

ไม่ได้ ข้อกำหนดอย่างเป็นทางการของ YAML ห้ามการใช้ตัวอักษรแท็บสำหรับการเยื้องอย่างเด็ดขาด คุณต้องใช้ช่องว่างเสมอ (โดยทั่วไปคือ 2 ช่องว่างต่อระดับ)

ฉันจะแปลง YAML เป็น JSON ได้อย่างไร

คุณสามารถแปลงไฟล์ YAML เป็น JSON ที่ผ่านการตรวจสอบความถูกต้องแล้วได้อย่างสะอาดตาด้วยคลิกเดียว โดยใช้ File2File.app บนเว็บเบราว์เซอร์ของคุณพร้อมความเป็นส่วนตัวที่สมบูรณ์