Ana içeriğe atla

YAML nedir? Temeller, Sözdizimi ve Kullanım Alanlarını Anlama

YAML, yapılandırmalar, otomasyon ve veri serileştirme için basit ama güçlü bir formattır. Gerçek dünya örnekleriyle nasıl çalıştığını öğrenin!
Güncel 31 Ağu 2026  · 14 dk. oku

Yapay Zekâyla Keşfet

ChatGPTClaudePerplexity

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: value yapı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 \n oluş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:

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:

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.


Tim Lu's photo
Author
Tim Lu
LinkedIn

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.

Konular
Veri Mühendisliği

Bu kurslarla veri mühendisliği hakkında daha fazla bilgi edinin!

Program

Veri Mühendisi Python'da

40 sa
Verileri verimli bir şekilde almak, temizlemek, yönetmek, işlem hatlarını planlamak ve izlemek için talep edilen becerileri kazanın ve veri mühendisliği alanında fark yaratın.
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Devamını GörDevamını Gör