YAML Nedir? Tanımı, Nasıl Çalışır, Kullanım Alanları

YAML, "YAML Ain't Markup Language" (YAML Bir İşaretleme Dili Değildir) kısaltmasıyla bilinen, insan tarafından kolayca okunabilir ve yazılabilir bir veri serileştirme formatıdır.

5 dk okuma
YAML

YAML, "YAML Ain't Markup Language" (YAML Bir İşaretleme Dili Değildir) kısaltmasıyla bilinen, insan tarafından kolayca okunabilir ve yazılabilir bir veri serileştirme formatıdır. Yapılandırılmış verileri düz metin dosyaları içinde temsil etmek için tasarlanmış olup, özellikle yazılım geliştirme, sistem yönetimi ve bulut uygulamalarında yaygın olarak kullanılır. JSON, XML ve diğer veri formatlarına göre daha sade ve insana yakın bir yapısı vardır.

YAML Nasıl Çalışır?

YAML, anahtar-değer (key-value) çiftleri, listeler ve iç içe geçmiş yapılar kullanarak verileri organize eder. Boşluklar (indentation) yapının hiyerarşisini belirlemek için kullanılır. Bu sayede köşeli parantez, virgül ve tırnak işaretlerine ihtiyaç duymaz.

Basit bir YAML örneği:

kisi:
  ad: Ahmet
  soyad: Yilmaz
  yas: 28
  sehir: Istanbul
  beceriler:
    - Python
    - JavaScript
    - Docker

Bu yapıda "kisi" ana anahtar, "ad", "soyad", "yas" ve "sehir" özellikleridir. "beceriler" ise liste (array) olarak gösterilmiş ve tire (-) işaretiyle başlayan satırlar listeye aittir.

YAML dosyaları .yaml veya .yml uzantısı ile kaydedilir. Yazılım uygulamaları bu dosyaları okuyup içeriğini programlama dillerine (Python, Java, Go, vb.) dönüştürür.

YAML'in Avantajları

  • Okunabilirlik: İnsan dostu yapısı nedeniyle hızlı anlaşılır ve hatalar kolayca görülür.
  • Yazması Kolay: Tırnak işareti ve köşeli parantez gereksizdir; boşluk kullanımı yeterlidir.
  • Kompakt Yapı: JSON'dan daha az karakter kullanarak aynı bilgiyi temsil edebilir.
  • Geniş Dil Desteği: Python, Ruby, Java, Go, Node.js gibi popüler dillerde kütüphaneler mevcuttur.
  • Yorum Desteği: Dosya içinde "#" işaretiyle yorum satırları eklenebilir.
  • Veri Tipleri: String, sayı, boolean, tarih gibi çeşitli veri tiplerini destekler.

YAML'in Dezavantajları

  • Boşluk Hassasiyeti: İndentation hataları kritik sorunlara neden olabilir. Sekme ve boşluk karması dosyayı çalışmaz hale getirir.
  • Parsing Karmaşıklığı: XML ve JSON'a kıyasla işlemci tarafından parse edilmesi biraz daha yavaş olabilir.
  • Geniş Dosya Boyutu: Çok büyük veri setleri için verimli olmayabilir.
  • Sınırlı Veri Yapıları: Bazı ileri veri yapıları doğrudan desteklenmez; custom çözümler gerekebilir.

YAML Nerede Kullanılır?

YAML, birçok popüler teknoloji ve yazılım aracında standart format olarak benimsenmiştir:

  • Docker Compose: Konteyner orkestrasyon ve yönetimi için docker-compose.yml dosyaları.
  • Kubernetes: Bulut uygulamaları ve konteynerları yapılandırmak için manifest dosyaları.
  • Ansible: Sunucu otomasyonu ve yapılandırma yönetimi playbook dosyaları.
  • GitHub Actions: CI/CD iş akışları tanımlamak için workflow dosyaları.
  • GitLab CI: Sürekli entegrasyon ve dağıtım pipeline yapılandırması.
  • Konfigürasyon Dosyaları: Uygulamaların ayarlarını depolamak (ör: Flask, Django, Spring Boot).
  • API Belgelendirmesi: OpenAPI (Swagger) spesifikasyonları YAML ile yazılabilir.
  • Veri Analizi: Python pandas, YAML dosyalarından veri yüklemeyi destekler.

YAML Veri Tipleri

Veri Tipi Örnek Açıklama
String (Metin) isim: "Mehmet" Tırnaklı veya tirnaksız metin
Integer (Tam Sayı) yas: 30 Ondalıksız sayı
Float (Ondalık) oran: 3.14 Ondalıklı sayı
Boolean (Doğru/Yanlış) aktif: true true veya false değeri
Tarih/Saat olusturma: 2024-01-15 ISO 8601 formatında tarih
Liste (Array) renkler: [kirmizi, mavi] Birden fazla eleman
Sözlük (Object) kimlik: {ad: Ali, soyad: Can} İç içe anahtar-değer çifti
Null (Boş) degisken: null Değer atanmamış alan

YAML ile JSON Karşılaştırması

YAML örneği:

kullanici:
  ad: Zeynep
  posta: zeynep@mail.com
  hobi:
    - yoga
    - kitap

Aynı veri JSON'da:

{
  "kullanici": {
    "ad": "Zeynep",
    "posta": "zeynep@mail.com",
    "hobi": ["yoga", "kitap"]
  }
}

YAML sürümü daha az karakter kullanırken aynı bilgiyi iletir. JSON daha sıkı bir yapı gerektirirken, YAML daha esnek ve insana yakındır.

YAML Güvenlik Notları

YAML dosyalarını işlerken dikkat edilmesi gereken hususlar vardır. Kötü niyetli kodlar YAML içine gömülebilir ve çalıştırılabilir. Bu nedenle güvenilir kaynaklar dışında YAML dosyalarını işlerken güvenli parser kütüphaneleri kullanmalısınız. Örneğin Python'da safe_load() fonksiyonu, unsafe_load() yerine tercih edilmelidir.

YAML Editörleri ve Araçları

  • VS Code: YAML eklentileriyle syntax highlighting ve validation desteği.
  • Sublime Text: YAML dosyaları için tema ve plugin desteği.
  • Online Editörler: YAML to JSON dönüştürücüler ve doğrulayıcılar.
  • Komut Satırı Araçları: yamllint ile YAML dosyalarının stili kontrol edilebilir.
SSS (Sık Sorulan Sorular)
YAML ve JSON arasında hangisi daha iyi?+
İkisi de farklı amaçlara hizmet eder. YAML, insanlar tarafından okunup yazması daha kolay olduğu için konfigürasyon dosyaları ve ansible playbook'ları için tercih edilir. JSON, web uygulamalarında veri aktarımı için daha hızlı ve yaygındır. Proje gereksinimlerine göre tercih edilmelidir.
YAML dosyasındaki indentation (boşluk) hatası nasıl düzeltilir?+
YAML'de indentation kritiktir. Sekme yerine 2 veya 4 boşluk kullanmalısınız. VS Code gibi editörlerde "Spaces" ayarını seçin ve dönüştürme işlemi yapın. YAML doğrulayıcı (validator) araçları sayesinde hatalar önceden tespit edilebilir.
Python'da YAML dosyasını nasıl okurum?+
PyYAML kütüphanesini kurmalısınız: pip install pyyaml. Ardından "import yaml" ile dosyayı açıp "yaml.safe_load()" kullanarak veriyi dictionary'ye dönüştürebilirsiniz. Güvenlik için asla "yaml.load()" kullanmayın.
Docker Compose ve Kubernetes neden YAML kullanır?+
YAML, karmaşık konfigürasyonları basit ve okunur şekilde temsil eder. Konteynerları tanımlamak, ağları yapılandırmak ve ortam değişkenlerini ayarlamak YAML'de daha anlaşılır hale gelir. Ayrıca insanlar tarafından kolayca düzenlenebilir ve hata riskini azaltır.
YAML dosyasında yorum satırı nasıl eklenir?+
YAML'de yorum satırları "#" işaretiyle başlatılır. Örnek: # Bu bir yorum satırı. Yorum satırları işlemci tarafından görmezden gelinir ve dosyanın yapısını etkilemez. Konfigürasyonları açıklamak için yaygın kullanılır.

Y harfindeki diğer terimler