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

YAML มาตรฐาน

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

แปลง YAML เป็น JSON

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

ตรวจสอบไฟล์และข้อมูลเมตา

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

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

เป็นส่วนตัว - ไฟล์จะไม่ออกจากอุปกรณ์ของคุณ

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

ลายเซ็นส่วนหัวระดับไบต์

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

ลายเซ็น HEX (OFFSET 0):

2D 2D 2D 0A

การแสดงผลรูปแบบ ASCII: ---\n

มาตรฐาน: YAML 1.2.2 Specification

ข้อมูลจำเพาะทางเทคนิค

สถาปัตยกรรมคอนเทนเนอร์รูปแบบซีเรียลไลซ์ข้อมูลที่อ่านง่าย ใช้การเยื้องเป็นโครงสร้าง และเป็นส่วนขยายของ JSON ที่รองรับแองเคอร์กับนามแฝง
การบีบอัดสตรีมข้อความแบบไม่บีบอัด
การจัดลำดับไบต์สตรีมข้อความ UTF-8 / Unicode
พื้นที่สีไม่เกี่ยวข้อง (การซีเรียลไลซ์ข้อมูล)
ช่องสัญญาณและโครงสร้างแมป (พจนานุกรมคีย์-ค่า), ลำดับ (รายการ), ชนิดสเกลาร์ (สตริง, ตัวเลข, บูลีน) และแองเคอร์ (&ref/*ref)
ขนาดสูงสุดขนาดเอกสารไม่จำกัด (รองรับสตรีมหลายเอกสารที่คั่นด้วย '---')
ความโปร่งใสไม่มี
การสตรีมและแบบโปรเกรสซีฟสตรีมหลายเอกสารช่วยให้ประมวลผลเอกสารทีละฉบับตามลำดับได้

ตารางเปรียบเทียบทางเทคนิค: YAML กับคู่แข่ง

คุณลักษณะทางเทคนิคYAML (ปัจจุบัน)JSONTOMLXML
รูปแบบไวยากรณ์ลำดับชั้นการเยื้องด้วยช่องว่างวงเล็บเหลี่ยมและเครื่องหมายคำพูดที่เข้มงวดตารางและคู่คีย์=ค่าแท็กเปิด/ปิดที่ยาวเยิ่นเย้อ
การรองรับคอมเมนต์รองรับคอมเมนต์ # ในตัวไม่อนุญาตให้มีคอมเมนต์รองรับคอมเมนต์ # ในตัว<!-- ความคิดเห็น -->
การนำไปใช้ใน DevOpsการรองรับแตกต่างกันไปตามซอฟต์แวร์การรองรับแตกต่างกันไปตามซอฟต์แวร์การตั้งค่าแพ็กเกจ Rust/Pythonการตั้งค่าเดิมขององค์กร
การนำข้อมูลกลับมาใช้ใหม่แองเคอร์ในตัว (&) และนามแฝง (*)ไม่มี (ต้องทำซ้ำด้วยตนเอง)ไม่มี (ต้องทำซ้ำด้วยตนเอง)เอนทิตี XML

รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex

ข้อผิดพลาดของโปรแกรมแยกวิเคราะห์: 'mapping values are not allowed here' หรือข้อผิดพลาดเรื่องการเยื้องย่อหน้า

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

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

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

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

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

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

แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน: ใช้ตัวแยกวิเคราะห์ YAML ที่ปลอดภัย ('yaml.safe_load()' ใน Python) เสมอและบังคับใช้ขีดจำกัดความลึกของการขยายแองเคอร์

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

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

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

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

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

  • ไวต่อช่องว่าง: การเผลอใช้ 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 ในเว็บเบราว์เซอร์ของคุณ พร้อมความเป็นส่วนตัวอย่างสมบูรณ์