Program
Yıllar içinde sayısız yapılandırma dosyasıyla çalıştım ve YAML sadeliği ve okunabilirliğiyle öne çıktı. İster Kubernetes’te iş akışları kurun, ister Docker’da servisleri tanımlayın ya da API isteklerini yapılandırın, YAML karmaşık yapılandırmaları daha yönetilebilir hale getirir. Girintiye dayalı temiz yapısı, XML gibi formatların karmaşasını ortadan kaldırırken esnekliğini korur.
Bu rehberde, YAML’ın sözdizimini, yapısını, ileri düzey özelliklerini ve en iyi uygulamalarını adım adım anlatarak güvenle çalışmanızı sağlayacağım.
YAML nedir?
YAML (Yet Another Markup Language / YAML Ain’t Markup Language), okunabilirliğe ve kolay kullanıma öncelik veren bir veri serileştirme formatıdır. XML, HTML benzeri iç içe etiketler kullanırken; JSON, parantezler ve tırnaklar kullanır ve Python sözlüklerine benzer. YAML ise daha yalındır ve yapıyı tanımlamak için girintileme kullanır; bu da onu insanlar için daha anlaşılır kılar.
YAML, skalerler (metin, sayı, boolean), sıralar (listeler) ve eşlemeler (anahtar-değer çiftleri) dahil çeşitli veri türlerini destekler. Kubernetes, Docker ve Ansible gibi araçlarda özellikle olmak üzere 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ı resmî 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 ele alacağız.
Temel sözdizimi kuralları
YAML için birkaç temel sözdizimi kuralı vardır:
- Boşluk girintisi yapıyı belirtir; sekme kullanmaktan kaçının!
- Anahtar-değer çiftleri, diğer dillere benzer şekilde
key: valueyapısını izler. - Satır başında kısa çizgi kullanmak bir listeyi ifade eder.
#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, verileri Python’daki sözlüklere benzer şekilde anahtar-değer çiftleri olarak temsil eder. Bu genellikle farklı yapılandırma dosyalarına ve ayarlara verilen bilgileri ifade eder. Metinleri 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 çizgi (-) kullanılarak gösterilir. Bu, tek bir anahtar altında birden fazla öğe listelemenizi sağlar. İşaretleme düzenleyicileriyle görüntülendiğinde genellikle madde işaretleriyle gösterilir.
fruits:
- Apple
- Banana
- Cherry
İç içe veri
İç içe yapılar, girinti kullanarak hiyerarşik veri gösterimine olanak tanır. Bunları iç içe sözlükler gibi düşünebilirsiniz. Girinti 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, belgeleri daha verimli ve düzenli hale getiren çok satırlı metinler, veri türleri ve çapalar gibi güçlü özellikler içerir. Bu bölümde bu yetenekleri pratik örneklerle inceleyeceğiz.
Çok satırlı metinler
YAML, | (literal blok) veya > (katlanmış blok) kullanarak çok satırlı metinleri destekler.
|literal blok, her satır sonu için yeni bir satır\noluşturur.>katlanmış blok, yalnızca ardışık satır sonlarında 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; metinler, sayılar, boolean’lar ve null değerler dahil çeşitli veri türlerini destekler. Biçimlendirmeye göre türleri otomatik algılar, ancak açık tür tanımlamaları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 (sıralar):
fruits:
- Apple
- Banana
- Cherry
- Sözlükler (eşlemeler):
person:
name: Alice
age: 30
is_student: false
Çapalar ve takma adlar
YAML, çapalar (&) kullanarak yeniden kullanılabilir değerler tanımlamanıza ve bunlara daha sonra takma adlarla (*) başvurmanıza olanak tanır. Bu, yapılandırma dosyalarındaki 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 çapadaki 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 olanın ü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
Çapalar ve takma adlar, değerleri elle tekrarlamanın verimsiz olacağı büyük yapılandırma dosyalarında özellikle kullanışlıdır. YAML dosyalarını DRY (Don’t Repeat Yourself) ilkesine uygun tutar 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 CI/CD iş akışları için geniş ölçüde kullanılır. Anlaşılması kolay olduğu için herkes Docker YAML kurulum dosyalarını alıp neler olduğunu rahatça anlayabilir.
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
environment:
- NGINX_HOST=localhost
- NGINX_PORT=80
YAML’ın okunabilirliği ve çapalar ile takma adları desteklemesi, tekrarları azaltmaya yardımcı olarak onu JSON veya XML’e kıyasla daha sürdürülebilir kılar.
YAML ve Docker’daki kullanımına dair daha fazlasını bu orta seviye Docker kursunda öğrenin.
Veri serileştirme ve aktarımı
YAML, karmaşık veri yapılarını insan tarafından okunabilir ve makineler tarafından kolayca ayrıştırılabilir bir formata dönüştürerek API’ler ve yapılandırma yönetimi araçları için verileri serileştirmede kullanılır.
Örneğin, YAML ile biçimlendirilmiş bir API istek gövdesi:
user:
id: 123
name: "John Doe"
email: "johndoe@example.com"
active: true
YAML’ın girintiye 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önetimi araçları, sistem durumlarını tanımlamak, süreçleri otomatikleştirmek ve ortamlar arasında tutarlılık 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; altyapı bileşenlerinin tutarlı şekilde yapılandırılmasını sağlar.
- Kubernetes, pod’lar, servisler ve deployment’lar gibi kaynakları tanımlamak için YAML manifestlerinden yararlanır; konteynerleştirilmiş uygulamaların otomatik orkestrasyonunu mümkün kılar.
İşte bir Kubernetes Pod yapılandırması ö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 Introduction to Kubernetes kursunda öğrenin.
API dokümantasyonu
OpenAPI ve Swagger gibi API spesifikasyonları, uç noktaları ve veri yapıları kolay okunur bir şekilde tanımlamak için YAML kullanır. YAML, API metotlarını, istek parametrelerini, yanıt formatlarını ve kimlik doğrulama yöntemlerini ana hatlarıyla belirtmekte kullanılır.
İşte YAML ile yazılmış bir OpenAPI spesifikasyonu ö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 dokümante etmek için YAML kullanır. Bu sayede istemci SDK’ları üretmek, etkileşimli API dokümantasyonu ve otomatik testler sağlamak için net bir plan sunarlar. Bu yapılandırılmış format, API uygulamaları arasında tutarlılığı güvence altına alır.
YAML Dosyalarıyla Çalışma
YAML, yapılandırma dosyaları, otomasyon ve veri serileştirmede yaygın olarak kullanılır; ancak girintiye dayandığından doğru biçimlendirme kritiktir. YAML’ı etkili bir şekilde okuma, yazma, doğrulama ve düzenleme yöntemleri şöyledir.
Python’da YAML okuma ve yazma
Python’un PyYAML kütüphanesi YAML’ı ayrıştırıp üretebilir.
Aşağıdaki gibi bir yapılandırma YAML dosyanız olduğunu hayal edin:
database:
host: localhost
port: 5432
user: admin
password: secret
Python’da yapılandırma dosyanızla şu şekilde ç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ışmakla ilgileniyorsanız, kapsamlı Python JSON rehberine göz atın.
YAML dosyalarını doğrulama
Doğru yapıyı sağlamak için, boşluk yerine sekme kullanımı veya yinelenen karakterler, sözdizimi sorunları ve sonda boşluklar gibi garip durumları kontrol etmek ü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 lint 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 vurgulamayla)
YAML’de Kaçınılması Gereken Yaygın Hatalar
Basitliğine rağmen YAML ile çalışırken yine de 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 yüzden bir linter veya metin düzenleyici kullanmanızı da öneriyorum!
Sekmeler ve boşlukları karıştırmak
YAML, girinti için boşluklara dayanır—asla boşluk ve sekmeleri karıştırmayın. Sekmeler YAML betiğinizi bozacaktır. Bu bilinçli bir tercihtir; farklı sistemler sekmeleri farklı okuyabildiğinden etkiyi en aza indirmek için boşlukların kullanımı tercih edilir.
Yanlış girintileme
Ayrıştırma hatalarını önlemek için tutarlı girintileme sağlayın. Girintiler YAML’ın hiyerarşiyi belirtmenin tek yolu olduğundan, yanlış ayrıştırma kodunuzda sorunlara yol açabilir. Bir key: value çiftini kolayca yanlış yerde bırakabilirsiniz; bu yüzden girintilere dikkat edin!
Özel karakterler için tırnakları unutmak
Özel karakterler veya boşluk içeren metinler için tırnak kullanın. Ters eğik çizgi, virgül, ünlem işareti vb. karakterlerin metin olarak okunabilmesi 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, YAML dosyalarıyla verimli bir şekilde çalışırken yaygın tuzaklardan kaçınabilirsiniz.
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 çeşitli uygulamalarda YAML ile etkili bir şekilde çalışabilirsiniz.
YAML’ı gerçek dünyada uygulamakla ilgileniyorsanız:
- YAML’ın CI/CD iş akışlarında nasıl kullanıldığını bu Makine Öğrenimi için CI/CD kursuyla öğrenin.
- API’lerin spesifikasyonlarında YAML’ı nasıl kullandığını bu Python ile API’lere Giriş kursunda keşfedin.
- Konteynerleştirme ve altyapı otomasyonunu bu Konteynerleştirme ve Sanallaştırma öğrenim yolunda daha derinlemesine inceleyin.
SSS
YAML evrensel midir?
Veri kaynağı veya hedef YAML’ı okuyabildiği sürece, veriyi serileştirmek ve taşımak için uygun ve kullanışlı bir yöntemdir. Veriyi YAML işleyebilen bir hedefe gönderdiğinizden emin olun.
YAML güvenli midir? YAML dosyaları güvenlik riski oluşturabilir 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’daki PyYAML kütüphanesinin 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 istemeden çalıştırılmasını önlemek için her zaman yaml.safe_load() kullanın. Benzer şekilde, YAML’ı uygulamalarda kullanırken güvenlik açıklarını önlemek için sıkı şema doğrulaması uygulayın.
YAML ortam değişkenlerini destekler mi?
Evet! YAML’ın kendisi ortam değişkenlerini doğrudan işlemez; ancak birçok araç (Docker Compose ve Kubernetes gibi) YAML dosyalarında ortam değişkenlerine referans vermeye izin verir.
YAML’de yorumlar nasıl ele alınır?
YAML, # sembolünü kullanarak tek satırlı yorumları destekler; ancak çok satırlı yorumları desteklemez. Çok satırlı yorumlara ihtiyacınız varsa, yaygın bir geçici çözüm _comment gibi sahte bir anahtar kullanmaktır. Ancak bu yalnızca 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.

