YAML — inson tomonidan o‘qilishi qulay bo‘lgan configuration va data serialization formati. Nomi tarixan YAML Ain’t Markup Language rekursiv iborasi bilan izohlanadi. YAML mapping, sequence va scalar qiymatlarni indentation yordamida ifodalaydi.
YAML DevOps configuration, CI/CD pipeline, container orchestration, application setting va data fayllarida keng qo‘llanadi.
Mapping
Key-value obyekt mapping shaklida yoziladi:
user:
name: Farrukh
active: true
Indentation parent-child relationshipni ko‘rsatadi.
Tab o‘rniga odatda space ishlatiladi.
Noto‘g‘ri indentation boshqa structure yoki parse xatosi yaratadi.
Sequence
Ro‘yxat - belgisi bilan yoziladi:
languages:
- Uzbek
- English
Sequence ichida scalar, mapping yoki boshqa sequence bo‘lishi mumkin.
Item indentationi bir xil bo‘lishi kerak.
Scalar
Scalar oddiy qiymat:
YAML parser ayrim yozuvlarni avtomatik type’ga aylantirishi mumkin.
Bu kutilmagan behavior yaratishi ehtimoli bor.
String
Ko‘p string quote’siz yozilishi mumkin:
title: UzbekDevs
Ammo special character, boshida *, &, {, [, !, # yoki type’ga o‘xshash qiymatlar uchun quote ishlatilishi mumkin.
Masalan:
version: "1.0"
Boolean
YAML versiyasi va parserga qarab ayrim so‘zlar boolean sifatida talqin qilinishi mumkin.
true va false aniq yozilishi afzal.
Eski parserlar yes, no, on, off kabi qiymatlarni boolean deb qabul qilishi mumkin.
Cross-tool compatibilityda bu muhim.
Null
Null quyidagi ko‘rinishlarda uchrashi mumkin:
value: null
value: ~
value:
Ularning semantikasi parser va schema bilan tekshiriladi.
Bo‘sh string va null bir xil emas.
Comment
# belgidan keyingi qism comment:
port: 8000 # application porti
Quote ichidagi # oddiy character bo‘lishi mumkin.
Comment parser natijasiga kirmaydi.
Sensitive secret commentda saqlanmaydi.
Nested structure
Mapping va sequence birlashtirilishi mumkin:
services:
- name: api
ports:
- 8000
- 8001
Katta nested configuration o‘qilishi qiyinlashishi mumkin.
Schema va modular file yordam beradi.
Flow style
YAML JSONga o‘xshash inline flow style’ni ham qo‘llaydi:
user: {name: Farrukh, active: true}
ports: [80, 443]
Block style katta configuration uchun ko‘proq o‘qiladi.
Ikkala usul bir documentda aralashishi mumkin.
Multi-line string
Literal block | yangi qatorlarni saqlaydi:
message: |
Birinchi qator
Ikkinchi qator
Folded block > qatorlarni ko‘pincha space bilan birlashtiradi:
message: >
Uzun matn
keyingi qator
Chomping indicator yakuniy newline behaviorini boshqaradi.
Anchor
Anchor takroriy structure’ni belgilaydi:
defaults: &defaults
timeout: 30
retries: 3
Alias shu qiymatga murojaat qiladi:
service:
<<: *defaults
Merge key support YAML parser va toolga bog‘liq bo‘lishi mumkin.
Alias xavfi
Ko‘p nested yoki takroriy alias parser memory va CPU’sini keskin oshirishi mumkin.
Bu YAML bombga o‘xshash DoS yaratadi.
Parser alias soni va document hajmini cheklashi kerak.
Tag
YAML tag qiymat type’i yoki custom objectni belgilashi mumkin:
value: !!str 123
Ayrim language parserlar custom tag orqali object constructor chaqirishi mumkin.
Untrusted YAML uchun safe loader ishlatiladi.
Unsafe deserialization
Noto‘g‘ri loader YAML ichidagi tag asosida arbitrary class yoki functionni yaratishi mumkin.
Bu code executionga olib kelishi ehtimoli bor.
Ishonchsiz input faqat scalar, list va mappingga ruxsat beradigan safe mode’da parse qilinadi.
Document separator
Bitta stream ichida bir nechta YAML document bo‘lishi mumkin.
--- yangi documentni, ... yakunni ko‘rsatishi mumkin.
Tool bir nechta documentni qo‘llaydimi, aniq tekshiriladi.
YAML va JSON
JSON YAMLning ayrim parserlarida valid subset sifatida qabul qilinishi mumkin.
YAML:
beradi.
JSON soddaroq va parserlar orasida kamroq noaniqlikka ega.
Configuration
YAML configuration faylida schema validation muhim.
Noto‘g‘ri key parser tomonidan qabul qilinib, application uni jim e’tiborsiz qoldirishi mumkin.
Strict validation typo va unknown fieldni aniqlaydi.
Security
Sensitive configuration:
- repositoryga secret yozmaslik;
- file permission;
- safe loader;
- size limit;
- alias limit;
- schema;
- external substitutionni nazorat qilish
bilan boshqariladi.
Environment variable substitution YAML standardining o‘zi emas; toolning qo‘shimcha imkoniyati bo‘lishi mumkin.
Indentation xatosi
YAML sintaksis jihatdan valid bo‘lib, lekin bitta key noto‘g‘ri parent ostiga tushishi mumkin. Bu ayniqsa access policy va deployment configurationda xavfli. Formatter, schema va review yakuniy parsed structure’ni tekshiradi.
Duplicate key
Bir mapping ichida ayni key ikki marta yozilsa parserlar turlicha behavior qilishi mumkin: birinchi, oxirgi qiymat yoki xato. Strict parser duplicate keyni rad etadi. Security policy’da yashirin override yuz bermaydi.
Merge
Anchor va merge configuration duplicationni kamaytiradi, ammo effective qiymatni ko‘rishni qiyinlashtirishi mumkin. Tool final resolved configurationni ko‘rsatishi kerak. Environment override qaysi tartibda qo‘llanishi hujjatlashtiriladi.
Parser farqi
Turli YAML library va versiyalar bir xil documentni type, merge yoki duplicate key bo‘yicha boshqa talqin qilishi mumkin. Configuration aynan productionda ishlatiladigan parser bilan test qilinadi va supported YAML versiyasi belgilanadi.
Linting
YAML linter indentation, duplicate key, noto‘g‘ri type va style muammolarini deploymentdan oldin aniqlaydi. Lint schema validationni to‘liq almashtirmaydi.
Bog‘liq tushunchalar
YAML, Data serialization, Mapping, Sequence, Scalar, Anchor, Alias, Safe loader, JSON, Configuration file, Schema validation