Bosh sahifa Wiki YAML

YAML

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:

  • string;
  • number;
  • boolean;
  • null;
  • datega o‘xshash qiymat;
  • boshqa parser type’i.

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:

  • comment;
  • anchor;
  • multi-line;
  • quote’siz key;
  • boyroq syntax

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:

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