YAML Yapılandırması (.yaml)
YAML StandartYAML Ain't Markup Language (YAML), temiz boşluk girintileri yoluyla insan tarafından okunabilirliğe önem veren; modern DevOps, bulut altyapısı (Kubernetes, Docker Compose) ve CI/CD otomasyonu için baskın veri serileştirme formatıdır.
YAML biçimini JSON biçimine dönüştür
Tarayıcında YAML biçimini JSON biçimine ücretsiz dönüştür. Dosyaları cihazında anında dönüştür.
İncele ve Meta Veriler
İşletim sistemleri ve dosya çözümleyicileri, YAML dosyalarını başlangıçtaki ikili sihirli bayt dizisini inceleyerek tanımlar:
Bayt düzeyinde başlık imzası (sihirli baytlar)
İşletim sistemleri ve dosya çözümleyicileri, YAML dosyalarını başlangıçtaki ikili sihirli bayt dizisini inceleyerek tanımlar:
HEX İMZASI (OFSET 0):
2D 2D 2D 0AASCII GÖSTERİMİ: ---\n
Standartlaştırma: YAML 1.2.2 belirtimi
Teknik Özellikler
| Kapsayıcı mimarisi | Girintiye dayalı, insanın kolayca okuyabileceği veri serileştirme biçimidir; JSON'ın üst kümesidir ve çapaları ve takma adları destekler. |
| Sıkıştırma | Sıkıştırılmamış metin akışı |
| Bayt Düzeni (Endianness) | UTF-8 / Unicode metin akışı |
| Renk Uzayları | Uygulanamaz (veri serileştirme) |
| Kanallar ve Yapı | Eşlemeler (anahtar-değer sözlükleri), diziler (listeler), skaler türler (dizgeler, sayılar, mantıksal değerler) ve çapalar (&ref/*ref) |
| Maksimum Boyutlar | Sınırsız belge boyutu ('---' ile ayrılmış çok belgeli akışları destekler) |
| Şeffaflık | Yok |
| Akış ve Aşamalı İşleme | Çok belgeli akışlar, belgelerin sırayla işlenmesini sağlar. |
Teknik karşılaştırma matrisi: YAML ve rakipleri
| Teknik Nitelik | YAML (Güncel) | JSON | TOML | XML |
|---|---|---|---|---|
| Sözdizimi Stili | Girinti boşluk hiyerarşisi | Katı köşeli parantezler ve tırnaklar | Tablolar ve anahtar=değer çiftleri | Ayrıntılı açılış/kapanış etiketleri |
| Yorum Desteği | Yerel (# yorumları) | Yorumlara izin verilmez | Yerel (# yorumları) | <!-- yorumlar --> |
| DevOps Benimsenmesi | Destek, yazılıma göre değişir. | Destek, yazılıma göre değişir. | Rust/Python paket yapılandırması | Kurumsal eski yapılandırma |
| Veri Yeniden Kullanımı | Yerel Çapalar (&) ve Takma Adlar (*) | Yok (manuel çoğaltma) | Yok (manuel çoğaltma) | XML Varlıkları |
Yaygın Bozulma Modları ve Hex Kurtarma Kılavuzu
Ayrıştırıcı hatası: 'mapping values are not allowed here' (eşleme değerlerine burada izin verilmiyor) veya girinti hatası.
Kök Neden: Sekmelerin boşluklarla karıştırılması veya yanlış hizalanmış girinti seviyeleri.
Kurtarma: Sekmeleri boşluklarla değiştir ve File2File.app YAML Formatter ile sözdizimini doğrula.
Güvenlik Analizi ve Ayrıştırıcı Saldırı Vektörleri
Özel tip etiketlerini destekleyen YAML ayrıştırıcıları (PyYAML'ın 'yaml.load()' fonksiyonu gibi), geçmişte rastgele nesne oluşturma yoluyla uzaktan kod yürütmeye izin veriyordu.
Bilinen Saldırı Vektörleri
- Güvensiz nesne seri durumdan çıkarma etiketleri (örn. '!!python/object/apply') aracılığıyla rastgele kod yürütme.
- Varlık genişletme bombaları (YAML çapaları ve takma adları kullanılarak milyarlarca kahkaha eşdeğeri).
- Örtük boolean ve zaman damgası ayrıştırmasından kaynaklanan tip karışıklığı açıkları.
Savunmaya yönelik en iyi uygulamalar: Her zaman güvenli YAML ayrıştırıcıları kullan (Python'daki 'yaml.safe_load()' gibi) ve çapaların açılma derinliğini sınırla.
Tarihsel kökenler ve önemli dönüm noktaları
Temel Avantajlar ve Artılar
- YAML altyapı araçlarında yaygındır, ancak destek ve davranış uygulamaya göre değişir.
- Temiz, okunabilir sözdizimi: sezgisel girintiler sayesinde süslü parantezler, köşeli parantezler ve tırnak işaretlerinin karmaşasını ortadan kaldırır.
- Yinelenen yapılandırma bloklarını çoğaltmadan yeniden kullanmak için referansları ve çapaları (&anchor / *anchor) destekler.
Teknik Kısıtlamalar ve Eksiler
- Boşluk karakterlerine duyarlı: kazara konulan bir sekme veya tek bir fazladan boşluk, belge hiyerarşisini bozabilir veya ayrıştırma hatalarına neden olabilir.
- Bilinen tür dönüştürme sorunları: Tırnaksız 'no', 'on', 'yes' gibi sözcükler veya ülke kodları ('NO', Norveç'in kodu) fark edilmeden boole değerlerine dönüşebilir.
- İkili formatlara veya katı JSON'a kıyasla önemli ölçüde daha yavaş ayrıştırma hızı.
İlginç Teknik Bilgiler
- YAML'ın açılımı önce 'Yet Another Markup Language' idi. Veri serileştirmeyi vurgulamak için ad daha sonra, aynı kısaltmayı yineleyen 'YAML Ain't Markup Language' olarak değiştirildi.
- Norveç Sorunu, bir YAML dosyasındaki 'NO' ülke kodunun 'false' mantıksal değeri olarak ayrıştırıldığı ünlü bir programlama hatasıdır.
- Dünyadaki her geçerli JSON dosyası aynı zamanda %100 geçerli bir YAML dosyasıdır.
Sıkça Sorulan Teknik Sorular
YAML ne için kullanılır?
YAML; bulut bilişim, Kubernetes küme dağıtımları, Docker Compose dosyaları, GitHub Actions iş akışları ve yazılım ayarları için başlıca yapılandırma dilidir.
YAML dosyalarında sekme (tab) kullanabilir miyim?
Hayır. Resmî YAML belirtimi girinti için sekme karakterlerini kesinlikle yasaklar; her zaman boşluk kullanmalısın (genellikle her girinti düzeyi için 2 boşluk).
YAML'ı JSON formatına nasıl dönüştürebilirim?
YAML dosyalarını web tarayıcında doğrudan File2File.app ile tek tıkta temiz ve doğrulanmış JSON'a, gizliliğini koruyarak dönüştürebilirsin.
İlgili YAML Dönüşüm Çiftleri
YAML yapılandırma dosyalarını JSON biçimine dönüştürmek, insan tarafından okunabilen girintili metin yapılarını web uygulamaları için makineler tarafından katı kurallara göre ayrıştırılabilen nesnelere çevirir.
JSON yapılandırma dosyalarını YAML biçimine dönüştürmek, katı programlı veri yapılarını, sistem yöneticilerinin düzenlemesi çok daha kolay olan temiz, insan tarafından okunabilen belgelere dönüştürür.