Lompat ke isi

YAML

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas
YAML
Ekstensi berkas*.yaml, *.yml
Jenis MIMEapplication/yaml
Rilis pertama11 Mei 2001; 24 tahun lalu (2001-05-11)
Rilis terbaru1.2 (Revisi 1.2.2) / 1 Oktober 2021; 4 tahun lalu (2021-10-01)
Jenis formatPertukaran data
Situs webyaml.org

YAML adalah format serialisasi data terbaca-manusia yang mengambil konsep dari bahasa-bahasa seperti XML, C, Python, Perl, serta format surat elektronik seperti yang tercantum dalam RFC 2822. YAML pertama kali diusulkan oleh Clark Evans pada tahun 2001 [1] yang merancang format ini bersama dengan Ingy döt Net dan Oren Ben-Kiki. YAML tersedia bagi beberapa bahasa dan skrip pemrograman.

YAML dikembangkan oleh Clark Evans, Oren Ben-Kiki, dan Ingy dot Net. Draf pertama YAML resmi dirilis sebagai versi 0.1 pada Mei 2001.[2] YAML mencapai rilis lengkap dalam versi 1.0 pada awal 2004.[3] Sebelum versi 1.0 selesai, YAML telah diimplementasikan lebih dulu seperti dalam Perl pada 2001 dan Ruby pada 2003.[4][5]

YAML aslinya merupakan kepanjangan dari "Yet Another Markup Language", tetapi pada April 2002 kepanjangannya telah berubah menjadi akronim rekursif dari "YAML Ain't Markup Language".[6]

Pada 2024, RFC 9512 menetapkan tipe MIME application/yaml untuk berkas YAML.[7]

YAML dirancang untuk mudah dibaca dan ditulis oleh manusia dengan menerapkan penggunaan sensitif terhadap indentasi dan spasi kosong (whitespace).[8] Indentasi YAML harus menggunakan spasi, bukan tab.[9]

Berikut ini adalah contoh metadata buku dalam YAML. Data judul dan pengarang merupakan bentuk pasangan kunci-nilai, sementara bahasa merupakan bentuk larik yang dinotasikan dengan daftar berbutir.[10]

judul: 1984
pengarang: "George Orwell"
bahasa:
    - Inggris
    - Indonesia

Struktur data

[sunting | sunting sumber]

YAML menetapkan tiga jenis struktur data, yaitu scalar, sequence, dan mapping. Scalar meliputi string, bilangan, stempel waktu, boolean, dan null. Sequence merupakan larik atau daftar yang urut. Mapping merupakan pasangan kunci-nilai yang tidak urut.[11][12]

Sebuah scalar bisa diapit dengan tanda petik, khususnya ketika nilai mengandung bilangan tetapi diharuskan menjadi tipe string seperti 1984:

"judul": "1984"
"pengarang": "George Orwell"
"bahasa":
    - "Inggris"
    - "Indonesia"

Tag digunakan untuk mengenali tipe data. Sebuah data bisa diberi tag secara jelas (eksplisit) dengan !, sementara data biasa akan diberikan tag secara tersirat oleh implementasi saat diproses.[13] Contoh berikut menggunakan tag eksplisit, !!str pada nilai 1984 untuk mencegah diartikan sebagai bilangan bulat:[14]

judul: !!str 1984 # sama dengan "1984"
pengarang: "George Orwell"
bahasa:
    - Inggris
    - Indonesia

Ekspresi blok dan alir

[sunting | sunting sumber]

YAML memungkinkan dua gaya ekspresi, yaitu gaya blok (block) yang berbasis indentasi dan gaya alir (flow) yang mirip JSON.[12] Contoh berikut menggunakan --- untuk menandakan dokumen baru:[12]

---
# Gaya blok
judul: 1984
pengarang: "George Orwell"
bahasa:
    - Inggris
    - Indonesia
   
---
# Gaya alir 
judul: 1984
pengarang: "George Orwell"
bahasa: [ "Inggris", "Indonesia" ]  # atau juga bisa { Inggris, Indonesia }

Anchor dan alias

[sunting | sunting sumber]

Anchor dan alias adalah fitur YAML yang memungkinkan pengguna "menggunakan kembali" data tanpa harus mengulang penulisannya.[15] Anchor ditandai dengan & dan alias ditandai dengan *.[16]

- buku_1:
    judul: 1984
    pengarang: "George Orwell"
    bahasa: &bahasa
      [ "Inggris", "Indonesia" ]

# Nilai bahasa di sini sama dengan nilai bahasa pada buku_1
- buku_2:
    judul: "Art of War"
    pengarang: "Sun Tzu"
    bahasa: *bahasa

Penggunaan

[sunting | sunting sumber]

YAML luas digunakan sebagai berkas konfigurasi untuk otomasi DevOps.[17] khususnya Kubernetes untuk konfigurasi berbagai sumber daya yang akan dipakai berbagai kontainer.[18] GitHub Actions dan GitLab CI/CD juga menggunakan YAML untuk konfigurasi alur kerja pembangunan perangkat lunak.[19][20]

TensorFlow sebelumnya mendukung konfigurasi model berbasis YAML hingga 2021.[21]

Keamanan implementasi

[sunting | sunting sumber]

Beberapa implementasi kerap menghadapi celah keamanan karena rancangan YAML membolehkan tipe data yang ditentukan sendiri sehingga rentan disalahgunakan untuk eksekusi kode jarak jauh.[8] Pada 2017, para ahli keamanan melaporkan celah pada implementasi Python PyYAML sebelum versi 5.1, CVE-2017-18342, bahwa API yaml.load() dapat dieksploitasi untuk menjalankan kode jarak jauh.[14] Kendati telah ditanggapi, perbaikannya tidak sepenuhnya tuntas karena masih bisa dieksploitasi melalui tag konstruktor PyYAML yang spesifik seperti !!python/object/apply. Celah ini dilaporkan dalam CVE-2019-20477.[22]

Sebuah penelitian dari 2019 menunjukkan bahwa fitur anchor dan alias bisa dieksploitasi sebagai serangan kegagalan layanan (denial-of-service) dengan cara kerja yang mirip bom zip.[23]

Referensi

[sunting | sunting sumber]
  1. Evans, Clark (11 Mei 2001). "YAML Draft 0.1". Yahoo! Tech groups: sml-dev. Diarsipkan dari asli tanggal 2013-09-07. Diakses tanggal 2008-08-02.
  2. Net, Ingy döt (12 Desember 2020). "In The Beginning". The YAML Company (dalam bahasa Inggris). Diakses tanggal 9 Februari 2026.
  3. Net, Ingy döt; Evans, Clark; Ben-Kiki, Oren (29 Januari 2004). "YAML Ain't Markup Language (YAML™) 1.0". yaml.org. Diakses tanggal 6 Februari 2026.
  4. Net, Ingy dot. "YAML.pm". MetaCPAN. Diarsipkan dari versi aslinya tanggal 8 Januari 2026. Diakses tanggal 6 Februari 2026.
  5. "ChangeLog-1.8.0". Ruby Programming Language Documentation. Diarsipkan dari versi aslinya tanggal 5 Februari 2026. Diakses tanggal 6 Februari 2026.
  6. Net, Ingy döt; Evans, Clark; Ben-Kiki, Oren (7 April 2002). "YAML Ain't Markup Language (YAML) (tm) 1.0". yaml.org. Diakses tanggal 6 Februari 2026.
  7. Perry, Tim (20 Februari 2024). "22 years later, YAML now has a media type". HTTP Tollkit (dalam bahasa Inggris). Diakses tanggal 8 Februari 2024.
  8. 1 2 Rasheed, Dietrich & Tahir 2019, hlm. 342.
  9. Tim Pengembangan Bahasa YAML 1.2.2, 6.1. Indentation Spaces.
  10. Tim Pengembangan Bahasa YAML 1.2.2, Chapter 1. Introduction to YAML.
  11. Tim Pengembangan Bahasa YAML 1.2.2, 3.2.1.1. Nodes.
  12. 1 2 3 Rasheed, Dietrich & Tahir 2019, hlm. 343.
  13. Tim Pengembangan Bahasa YAML 1.2.2, 3.2.1.2. Tags.
  14. 1 2 Yegulalp, Serdar (17 Agustus 2022). "7 YAML gotchas to avoid—and how to avoid them". InfoWorld (dalam bahasa Inggris). Diakses tanggal 6 Februari 2026.
  15. Tim Pengembangan Bahasa YAML 1.2.2, 3.2.2.2. Anchors and Aliases.
  16. "Optimize GitLab CI/CD configuration files". GitLab Docs. Diakses tanggal 2026-02-09.
  17. Ciaburn, Thomas (19 November 2018). "Behold, the world's most popular programming language – and it is...wait, er, YAML?!?". The Register (dalam bahasa Inggris). Diakses tanggal 6 Februari 2026.
  18. Fulton, Scott. "How Kubernetes won, and why your business needs to know it". ZDNET (dalam bahasa Inggris). Diakses tanggal 2026-02-08.
  19. Vaughan-Nichols, Steven (8 Agustus 2019). "GitHub Actions moves GitHub into DevOps". ZDNET (dalam bahasa Inggris). Diakses tanggal 7 Februari 2026.
  20. Freeman, Jonathan (30 November 2016). "Review: GitLab rocks version control". Computerworld (dalam bahasa English). Diakses tanggal 7 Februari 2026. Pemeliharaan CS1: Bahasa yang tidak diketahui (link)
  21. Sharma, Ax. "Google's TensorFlow drops YAML support due to code execution flaw". BleepingComputer (dalam bahasa American English). Diakses tanggal 2026-02-06.
  22. "1806005 – (CVE-2019-20477) CVE-2019-20477 PyYAML: command execution through python/object/apply constructor in FullLoader". Red Hat Bugzilla. 21 Februari 2020. Diakses tanggal 7 Februari 2026.
  23. Rasheed, Dietrich & Tahir 2019, hlm. 344.

Daftar pustaka

[sunting | sunting sumber]

Pranala luar

[sunting | sunting sumber]