Program
Yıllar içinde sayısız yapılandırma dosyasıyla çalıştım ve YAML basitliği ve okunabilirliğiyle öne çıktı. Kubernetes’te iş akışları kurarken, Docker’da servisleri tanımlarken veya API isteklerini yapılandırırken YAML, karmaşık yapılandırmaları daha yönetilebilir hale getiriyor. Girintilemeye dayalı temiz yapısı, XML gibi formatların kalabalığını ortadan kaldırırken esnekliğini koruyor.
Bu rehberde, YAML’ın sözdizimini, yapısını, ileri özelliklerini ve en iyi uygulamalarını adım adım anlatacağım; böylece güvenle çalışabilirsiniz.
YAML nedir?
YAML (Yet Another Markup Language / YAML Ain’t Markup Language), okunabilirliği ve kullanım kolaylığını önceleyen bir veri serileştirme formatıdır. XML, HTML benzeri iç içe etiketler; JSON, Python sözlüklerine benzer küme parantezleri ve tırnaklar kullanırken, YAML daha yalındır ve yapıyı tanımlamak için girintilemeden yararlanır; bu da onu insanlar için daha anlaşılır kılar.
YAML; skalarlar (string, sayı, boolean), diziler (listeler) ve eşlemeler (anahtar-değer çiftleri) dahil olmak üzere çeşitli veri türlerini destekler. Özellikle Kubernetes, Docker ve Ansible gibi araçlarda yapılandırma dosyalarında, altyapı otomasyonunda ve veri alışverişinde yaygın olarak kullanılır.
Ayrıca YAML, JSON’un bir üst kümesidir; yani geçerli JSON dosyaları YAML olarak ayrıştırılabilir. YAML dosyaları genellikle .yaml veya .yml uzantısına sahiptir.
YAML hakkında daha fazlasını web sitesinden de öğrenebilirsiniz!
YAML Sözdizimi ve Yapısı
Bu bölümde, anahtar-değer çiftleri, listeler, iç içe veri ve yorumlar dahil olmak üzere YAML sözdiziminin temel ilkelerini inceleyeceğiz.
Temel sözdizimi kuralları
YAML için birkaç temel sözdizimi kuralı vardır:
- Boşluk girintisi yapıyı belirtir; sekmelerden kaçının!
- Anahtar-değer çiftleri, diğer dillere benzer şekilde
key: valueyapısını izler. - Satır başındaki kısa çizgiler bir listeyi belirtir.
#kullanmak yorum satırları oluşturur.
# Here is an example of YAML
name: John Doe
age: 30
skills:
- Python
- YAML
Anahtar-değer çiftleri
YAML, tıpkı Python’daki sözlüklere benzer şekilde verileri anahtar-değer çiftleri olarak gösterir. Bu çoğu zaman farklı yapılandırma dosyalarına ve ayarlara verilen bilgileri ifade eder. String’leri veya anahtarları tırnak içine almanıza gerek yoktur; yalnızca gereken anahtar ve değerleri yazın:
location: New York
country: USA
security-level: user
YAML’de listeler
Listeler kısa çizgiler (-) kullanılarak gösterilir. Bu, tek bir anahtar altında birden çok öğeyi listelemenize olanak tanır. İşaretleme düzenleyicileri tarafından okunduğunda görsel olarak çoğu zaman madde işaretleriyle temsil edilir.
fruits:
- Apple
- Banana
- Cherry
İç içe veri
İç içe yapılar, girintileme kullanılarak hiyerarşik veri gösterimine olanak tanır. Bunları iç içe sözlükler gibi düşünebilirsiniz. Girintileme kullanarak hangi anahtarların diğerlerinin alt kümesi olduğunu belirtirsiniz.
person:
name: Alice
details:
age: 25
city: London
Yorumlar
Yorumlar # ile başlar ve YAML ayrıştırıcıları tarafından yok sayılır. Bu yorumlar tek satırlıdır.
# This is a comment
username: admin
password: secret
Gelişmiş YAML Özellikleri
YAML; çok satırlı string’ler, veri türleri ve bağlayıcılar gibi belgeleri daha verimli ve düzenli kılan güçlü özellikler içerir. Bu bölümde, bu yetenekleri pratik örneklerle inceleyeceğiz.
Çok satırlı string’ler
YAML, | (literal blok) veya > (katlanmış blok) kullanarak çok satırlı string’leri destekler.
|literal blok, her satır sonu için yeni bir satır\noluşturur.>katlanmış blok, yalnızca ardışık satır sonları için yeni satır oluşturur.
literal: |
This is a
multi-line string.
folded: >
This is another
multi-line string.
Yukarıdakiler, çıktıyı göstererek daha iyi anlaşılır.
|(literal blok) için:
This is a
multi-line string.
>(katlanmış blok) için:
This is another multi-line string.
YAML’de veri türleri
YAML; string’ler, sayılar, boolean’lar ve null değerler dahil olmak üzere çeşitli veri türlerini destekler. Biçimlendirmeye göre türleri otomatik algılar, ancak açık tür tanımlarına da izin verir.
Aşağıdaki örnek, YAML’de temel veri türlerinin kullanımını gösterir:
string_implicit: Hello, YAML! # No quotes needed unless necessary
string_double_quoted: "Supports escape sequences like \n and \t"
string_single_quoted: 'Raw text, no escape sequences'
integer: 42 # Whole numbers
float: 3.14 # Numbers with decimals
boolean_true: true
boolean_false: false
null_value: null # Null value
null_tilde: ~ # Another way to represent null
YAML, gerektiğinde !!type kullanarak açık tür bildirimlerine izin verir:
explicit_string: !!str 123 # Forces 123 to be a string
explicit_integer: !!int "42" # Forces "42" to be an integer
explicit_float: !!float "3.14" # Forces "3.14" to be a float
YAML genellikle yapılandırılmış veriler için kullanıldığından şunları destekler:
- Listeler (diziler):
fruits:
- Apple
- Banana
- Cherry
- Sözlükler (eşlemeler):
person:
name: Alice
age: 30
is_student: false
Bağlayıcılar ve takma adlar
YAML, bağlayıcılar (&) kullanarak yeniden kullanılabilir değerler tanımlamanıza ve bunlara takma adlarla (*) daha sonra başvurmanıza olanak tanır. Bu, yapılandırma dosyalarındaki gereksiz tekrarları azaltarak onları daha temiz ve bakımı kolay hale getirir.
defaults: &default_settings
retries: 3
timeout: 30
server1:
host: example.com
retries: *default_settings # Reuses the retries value from defaults
<<: sözdizimi, bir bağlayıcıdan anahtar-değer çiftlerini başka bir eşlemeye birleştirmeye olanak tanır. Bir anahtar her ikisinde de varsa, yeni değer özgün değerin üzerine yazar.
defaults: &default_settings
retries: 3
timeout: 30
server1:
<<: *default_settings # Merges all key-value pairs from default_settings
host: example.com # This key is added to the merged data
Nihai çözümlenmiş yapı şöyledir:
server1:
retries: 3
timeout: 30
host: example.com
Bağlayıcılar ve takma adlar, değerlerin elle tekrarlandığı büyük yapılandırma dosyalarında özellikle kullanışlıdır. YAML dosyalarını DRY (Don't Repeat Yourself) tutmaya yardımcı olur ve güncellemeleri kolaylaştırır.
YAML’in Yaygın Kullanım Alanları
YAML; yazılım geliştirme, altyapı otomasyonu ve API yönetiminde yaygın olarak kullanılır. İnsan tarafından okunabilir sözdizimi, onu yapılandırma dosyaları, veri serileştirme ve Kod Olarak Altyapı (IaC) için tercih edilen bir format yapar. En yaygın uygulamalarını inceleyelim.
Yapılandırma dosyaları
YAML, Docker Compose, Kubernetes ve gibi uygulamalarda yapılandırma için yaygın olarak kullanılır CI/CD boru hatları. Anlaşılması kolay olduğu için, herhangi biri Docker YAML kurulum dosyalarını eline aldığında neler olup bittiğini rahatça anlayabilir.
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
environment:
- NGINX_HOST=localhost
- NGINX_PORT=80
YAML’ın okunabilirliği ve bağlayıcılar ile takma adları desteklemesi, tekrarları azaltır ve onu JSON veya XML’e göre daha bakımı kolay hale getirir.
YAML ve Docker’daki kullanımına dair daha fazla bilgiyi bu orta seviye Docker kursunda öğrenin.
Veri serileştirme ve aktarımı
YAML, karmaşık veri yapıları makineler tarafından kolayca ayrıştırılabilen ve insan tarafından okunabilir bir formata dönüştürerek API’ler ve yapılandırma yönetim araçları için verileri serileştirmede kullanılır.
Örneğin, YAML biçiminde bir API istek gövdesi:
user:
id: 123
name: "John Doe"
email: "johndoe@example.com"
active: true
YAML’ın girintilemeye dayalı yapısı, gereksiz sözdizimini ortadan kaldırır; JSON’a kıyasla daha hafif, okunabilir ve düzenlemesi kolaydır.
Kod Olarak Altyapı (IaC)
Ansible ve Kubernetes gibi yapılandırma yönetim araçları, sistem durumlarını tanımlamak, süreçleri otomatikleştirmek ve ortamlar arasında tutarlılığı sağlamak için YAML’dan yararlanır.
- Ansible’da YAML; sistem durumlarını, görevleri ve bağımlılıkları tanımlayan playbook’ları yazmak için kullanılır; böylece altyapı bileşenleri tutarlı şekilde yapılandırılır.
- Kubernetes, pod’lar, servisler ve dağıtımlar gibi kaynakları tanımlamak için YAML manifestolarını kullanır ve konteynerleştirilmiş uygulamaların otomatik orkestrasyonunu sağlar.
İşte bir Kubernetes Pod yapılandırma örneği:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app-container
image: my-app:latest
ports:
- containerPort: 8080
YAML’ın Kubernetes’te nasıl kullanıldığını bu Kubernetes’e Giriş kursunda öğrenin.
API dokümantasyonu
OpenAPI ve Swagger gibi API spesifikasyonları, uç noktaları ve veri yapılarını kolay okunur bir şekilde tanımlamak için YAML kullanır. YAML; API yöntemlerini, istek parametrelerini, yanıt biçimlerini ve kimlik doğrulama yöntemlerini ana hatlarıyla belirtmek için kullanılır.
İşte YAML biçiminde bir OpenAPI spesifikasyon örneği:
openapi: 3.0.0
info:
title: User API
version: "1.0"
paths:
/users:
get:
summary: Retrieve a list of users
responses:
"200":
description: Successful response
Örneğin OpenAPI spesifikasyonları, RESTful API’leri belgelemek için YAML kullanır. Bu sayede istemci SDK’ları, etkileşimli API dokümantasyonu ve otomatik testler üretmek için net bir plan sunarlar. Bu yapılandırılmış format, API uygulamaları arasında tutarlılık sağlar.
YAML Dosyalarıyla Çalışmak
YAML; yapılandırma dosyaları, otomasyon ve veri serileştirme için yaygın olarak kullanılır, ancak girintilemeye dayandığı için doğru biçimlendirme kritik önemdedir. YAML’ı etkili şekilde okuma, yazma, doğrulama ve düzenleme yolları şöyledir.
Python’da YAML okuma ve yazma
Python’un PyYAML kütüphanesi YAML’ı ayrıştırabilir ve üretebilir.
Aşağıdaki yapılandırma YAML dosyasına sahip olduğunuzu düşünün:
database:
host: localhost
port: 5432
user: admin
password: secret
Yapılandırma dosyanızla Python’da şöyle çalışabilirsiniz:
import yaml
# Load YAML data
with open("config.yaml", "r") as file:
data = yaml.safe_load(file) # safe_load prevents arbitrary code execution
# Modify data (optional)
data["database"]["user"] = "new_user"
# Write YAML data
with open("output.yaml", "w") as file:
yaml.dump(data, file, default_flow_style=False)
Python’da JSON verileriyle çalışmak ilginizi çekiyorsa, kapsamlı Python JSON eğitimine göz atın.
YAML dosyalarını doğrulama
Doğru yapı için, boşluk yerine sekme kullanımı veya yinelenen karakterler, sözdizimi sorunları ve sonda boşluklar gibi tuhaf sorunları denetlemek üzere araçlar kullanabilirsiniz.
Bazı popüler YAML doğrulayıcıları şunlardır:
- CLI aracı: yamllint (Python tabanlı linter)
- Çevrimiçi doğrulayıcılar: YAML Lint, JSON Formatter’ın YAML Validator’ı
YAML düzenleme
YAML’ı herhangi bir metin düzenleyicide yazıp düzenleyebilirsiniz, ancak linter araçları ve sözdizimi vurgulama okunabilirliği artırır.
Favori düzenleyicilerimden bazıları:
- VS Code (YAML eklentileriyle)
- PyCharm (yerleşik destek)
- Sublime Text (YAML sözdizimi vurgulamasıyla)
YAML’de Kaçınılması Gereken Yaygın Hatalar
Basitliğine rağmen YAML ile çalışırken hâlâ kolayca sorunlar ve yazım hataları yaşayabilirsiniz. Bu bölümde bu hataları ele alıyor ve temiz, doğru dosyalar yazmak için en iyi uygulamaları sunuyoruz. Bu nedenle bir linter veya metin düzenleyici kullanmanızı da öneriyorum!
Sekmeler ve boşlukları karıştırmak
YAML, girintileme için boşluklara dayanır—asla boşluk ve sekmeleri karıştırmayın. Sekmeler YAML betiğinizi bozacaktır. Bu aslında bilinçli bir tercihtir; farklı sistemler sekmeleri farklı okur ve etkiyi en aza indirmek için boşlukların kullanımı tercih edilir.
Hatalı girintileme
Ayrıştırma hatalarını önlemek için tutarlı girintileme sağlayın. Girintilemeler YAML’ın hiyerarşiyi belirtmenin tek yöntemi olduğundan, hatalı ayrıştırma kodunuzda sorunlara yol açabilir. Bir key: value çiftini kolayca yanlış yere sıkıştırabilirsiniz; bu yüzden girintilere dikkat edin!
Özel karakterler için tırnakları unutmak
Özel karakterler veya boşluklar içeren string’ler için tırnak kullanın. Ters eğik çizgi, virgül, ünlem işareti vb. gibi öğelerin string olarak okunması için tırnak gerekir.
path: "/home/user/documents"
message: "Hello, World!"
Doğru doğrulama, yapılandırılmış düzenleme ve Python’un PyYAML’ını kullanarak, yaygın tuzaklardan kaçınırken YAML dosyalarıyla verimli şekilde çalışabilirsiniz.
Sonuç
YAML, yapılandırma, veri serileştirme ve altyapı otomasyonunda yaygın olarak kullanılan güçlü ama basit bir formattır. Sözdizimini, yapısını ve en iyi uygulamalarını anlayarak YAML ile çeşitli uygulamalarda verimli şekilde çalışabilirsiniz.
YAML’ı gerçek dünyada uygulamak ilginizi çekiyorsa:
- Bu Makine Öğrenimi için CI/CD kursuyla YAML’ın CI/CD iş akışlarında nasıl kullanıldığını öğrenin.
- Bu Python’da API’lere Giriş kursunda API’lerin spesifikasyonlarında YAML’ı nasıl kullandığını keşfedin.
- Bu Konteynerleştirme ve Sanallaştırma öğrenim yolunda konteynerleştirme ve altyapı otomasyonuna daha derinlemesine dalın.
SSS
YAML evrensel mi?
Veri kaynağı veya hedef YAML okuyabildiği sürece, verileri serileştirmek ve taşımak için geçerli ve kullanışlı bir yöntemdir. Verileri YAML işleyebilen bir hedefe gönderdiğinizden emin olun.
YAML güvenli mi? YAML dosyaları güvenlik riskleri doğurabilir mi?
YAML’ın kendisi yalnızca bir veri formatıdır; ancak güvenilmeyen YAML dosyaları ayrıştırılırken güvenlik riskleri ortaya çıkar. Python’un PyYAML kütüphanesindeki varsayılan yaml.load() yöntemi, YAML içine gömülü rastgele kodu çalıştırabilir ve bu da risklidir. Bunun yerine, kötü amaçlı kodun istenmeden yürütülmesini önlemek için her zaman yaml.safe_load() kullanın. Benzer şekilde, uygulamalarda YAML kullanırken güvenlik açıklarını önlemek için sıkı şema doğrulaması sağlayın.
YAML ortam değişkenlerini destekler mi?
Evet! YAML’ın kendisi ortam değişkenlerini doğrudan işlemezken, birçok araç (Docker Compose ve Kubernetes gibi) YAML dosyaları içinde ortam değişkenlerine başvurmayı sağlar.
YAML’de yorumlar nasıl ele alınır?
YAML, # sembolünü kullanarak tek satırlık yorumları destekler, ancak çok satırlı yorumları desteklemez. Çok satırlı yorumlara ihtiyaç duyarsanız, yaygın bir çözüm _comment gibi sahte bir anahtar kullanmaktır. Ancak bu sadece bir konvansiyondur ve uygulamanız özellikle filtrelemediği sürece YAML ayrıştırıcıları tarafından yok sayılmaz.
Mekânsal analiz, makine öğrenimi ve veri hatları konusunda deneyime sahip bir veri bilimciyim. GCP, Hadoop, Hive, Snowflake, Airflow ve diğer veri bilimi/mühendisliği süreçleriyle çalıştım.

