Перейти к основному контенту

Что такое YAML? Основы, синтаксис и области применения

YAML — простой и мощный формат для конфигураций, автоматизации и сериализации данных. Узнайте, как он работает, на примерах из практики!
Обновлено 31 авг. 2026 г.  · 14 мин читать

Изучить с помощью AI

ChatGPTClaudePerplexity

За эти годы довелось поработать с бесчисленным количеством файлов конфигураций, и YAML выделяется своей простотой и читаемостью. Будь то настройка рабочих процессов в Kubernetes, описание сервисов в Docker или структурирование API-запросов, YAML делает сложные конфигурации более управляемыми. Его чистая, основанная на отступах структура избавляет от «шума» форматов вроде XML, при этом оставаясь гибкой.

В этом руководстве рассмотрим синтаксис, структуру, продвинутые возможности и лучшие практики работы с YAML, чтобы вы могли уверенно его использовать. 

Что такое YAML?

YAML (Yet Another Markup Language / YAML Ain’t Markup Language) — это формат сериализации данных, в котором приоритет отдан читаемости и простоте. В то время как XML использует смесь вложенных тегов, похожих на HTML, а JSON — фигурные скобки и кавычки (как в словарях Python), YAML более лаконичен и применяет отступы для определения структуры, что делает его удобным для человека.

YAML поддерживает различные типы данных, включая скаляры (строки, числа, булевы значения), последовательности (списки) и отображения (пары ключ–значение). Его широко используют в конфигурационных файлах, автоматизации инфраструктуры и обмене данными, особенно в таких инструментах, как Kubernetes, Docker и Ansible.

Кроме того, YAML является супермножеством JSON, то есть валидные JSON-файлы можно разобрать как YAML. Файлы YAML обычно имеют расширение .yaml или .yml.

Больше о YAML можно узнать на его официальном сайте.

Синтаксис и структура YAML

В этом разделе разберём базовые принципы синтаксиса YAML, включая пары ключ–значение, списки, вложенные данные и комментарии.

Базовые правила синтаксиса

Есть несколько основных правил синтаксиса YAML: 

  • Структура задаётся пробельными отступами, поэтому избегайте табуляций! 
  • Пары ключ–значение имеют вид key: value, как и в других языках. 
  • Дефисы в начале строк обозначают список. 
  • Символ # создаёт строки комментариев.
# Here is an example of YAML
name: John Doe
age: 30
skills:
  - Python
  - YAML

Пары ключ–значение

YAML представляет данные в виде пар ключ–значение, как словари в Python. Так часто описывают параметры для разных конфигурационных файлов и настроек. Нет необходимости заключать строки или ключи в кавычки — просто укажите нужные ключи и значения:

location: New York
country: USA
security-level: user

Списки в YAML

Списки обозначаются с помощью дефисов (-). Это позволяет перечислять несколько объектов под одним ключом. Во многих редакторах разметки это визуально выглядит как маркированные списки.

fruits:
  - Apple
  - Banana
  - Cherry

Вложенные данные

Вложенные структуры позволяют иерархически представлять данные с помощью отступов. Представьте их как вложенные словари. Используя отступы, вы указываете, какие ключи являются подмножествами других.

person:
  name: Alice
  details:
    age: 25
    city: London

Комментарии

Комментарии начинаются с # и игнорируются парсерами YAML. Это однострочные комментарии.

# This is a comment
username: admin
password: secret

Продвинутые возможности YAML

YAML включает мощные функции, такие как многострочные строки, типы данных и якори, которые делают документы эффективнее и структурированнее. В этом разделе рассмотрим эти возможности на практических примерах.

Многострочные строки

YAML поддерживает многострочные строки с помощью | (буквальный блок) или > (свёрнутый блок). 

  • Буквальный блок | создаёт символ новой строки \n для каждого разрыва строки. 
  • Свёрнутый блок > создаёт новую строку только для последовательных разрывов.
literal: |
  This is a
  multi-line string.

folded: >
  This is another
  multi-line string.

Вышеуказанное проще понять на результате.

  • Для | (буквального блока):
This is a
multi-line string.
  • Для > (свёрнутого блока):
This is another multi-line string.

Типы данных в YAML

YAML поддерживает различные типы данных, включая строки, числа, булевы значения и null. Он автоматически определяет типы по форматированию, но также допускает явные объявления типов.

Ниже показан пример использования базовых типов данных в YAML:

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 позволяет явно указывать типы с помощью !!type при необходимости:

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 часто используют для структурированных данных, он поддерживает:

  • Списки (последовательности):
fruits:
  - Apple
  - Banana
  - Cherry
  • Словари (отображения):
person:
  name: Alice
  age: 30
  is_student: false

Якоря и псевдонимы

YAML позволяет определять переиспользуемые значения с помощью якорей (&) и ссылаться на них позже с помощью псевдонимов (*). Это снижает избыточность в конфигурациях, делая их чище и проще в сопровождении.

defaults: &default_settings
  retries: 3
  timeout: 30

server1:
  host: example.com
  retries: *default_settings  # Reuses the retries value from defaults

Синтаксис <<: позволяет сливать пары ключ–значение из якоря в другое отображение. Если ключ присутствует в обоих, новое значение переопределяет исходное.

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

Итоговая развёрнутая структура:

server1:
  retries: 3
  timeout: 30
  host: example.com

Якоря и псевдонимы особенно полезны в крупных конфигурационных файлах, где ручное повторение значений было бы неэффективным. Они помогают держать YAML в стиле DRY (Don't Repeat Yourself) и упрощают обновления.

Распространённые сценарии использования YAML

YAML широко применяют в разработке ПО, автоматизации инфраструктуры и управлении API. Читаемый синтаксис делает его предпочтительным форматом для конфигураций, сериализации данных и описания инфраструктуры как кода (IaC). Рассмотрим самые частые применения.

Конфигурационные файлы

YAML широко используется для конфигураций в приложениях вроде Docker Compose, Kubernetes и конвейеров CI/CD. Благодаря простоте чтения любой человек сможет открыть YAML-файлы Docker и понять, что происходит.

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
    environment:
      - NGINX_HOST=localhost
      - NGINX_PORT=80

Читаемость YAML и поддержка якорей с псевдонимами помогают уменьшить повторения, делая его более удобным в сопровождении, чем JSON или XML.

Узнайте больше о YAML и его использовании в Docker в этом курсе уровня выше среднего Docker.

Сериализация и передача данных

YAML используют для сериализации данных в API и инструментах управления конфигурациями, преобразуя сложные структуры данных в человекочитаемый формат, который при этом легко парсится машинами. 

Например, тело запроса к API в формате YAML:

user:
  id: 123
  name: "John Doe"
  email: "johndoe@example.com"
  active: true

Структура YAML, основанная на отступах, устраняет лишний синтаксис, делая его легче, читабельнее и проще в редактировании по сравнению с JSON.

Инфраструктура как код (IaC)

Инструменты управления конфигурациями, такие как Ansible и Kubernetes, используют YAML для описания состояний систем, автоматизации процессов и обеспечения согласованности между средами.

  • В Ansible YAML применяют для написания плейбуков, определяющих состояния системы, задачи и зависимости, чтобы компоненты инфраструктуры настраивались единообразно. 
  • Kubernetes использует YAML-манифесты для описания ресурсов, таких как поды, сервисы и деплойменты, что позволяет автоматически оркестрировать контейнеризованные приложения.

Вот пример конфигурации пода в Kubernetes:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app-container
      image: my-app:latest
      ports:
        - containerPort: 8080

Узнайте больше о том, как YAML используется в Кубernetes, в курсе Introduction to Kubernetes.

Документация API

Спецификации API, такие как OpenAPI и Swagger, используют YAML для удобного описания эндпоинтов и структур данных. На YAML определяют методы API, параметры запросов, форматы ответов и методы аутентификации.

Пример спецификации OpenAPI на YAML:

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

Например, спецификации OpenAPI используют YAML для документирования RESTful API. Это позволяет создавать понятный чертёж для генерации клиентских SDK, интерактивной документации и автоматизированного тестирования. Такая структура обеспечивает единообразие реализаций API.

Работа с файлами YAML

YAML широко применяют для конфигураций, автоматизации и сериализации данных, но из-за опоры на отступы крайне важна корректная разметка. Ниже — как эффективно читать, писать, проверять и редактировать YAML.

Чтение и запись YAML в Python

Библиотека Python PyYAML умеет разбирать и генерировать YAML.

Представьте, что у вас есть следующий конфигурационный файл YAML:

database:
  host: localhost
  port: 5432
  user: admin
  password: secret

Вот как можно работать с этим конфигурационным файлом в Python:

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)

Если вас интересует работа с данными JSON в Python, загляните в подробное руководство по JSON в Python.

Проверка (валидация) файлов YAML

Чтобы убедиться в корректной структуре, используйте инструменты для проверки на табуляции вместо пробелов и другие проблемы: повторяющиеся символы, синтаксические ошибки, конечные пробелы.

Вот несколько популярных валидаторов YAML:

Редактирование YAML

Писать и редактировать YAML можно в любом текстовом редакторе, но линтеры и подсветка синтаксиса повышают удобство чтения.

Некоторые из любимых редакторов:

  • VS Code (с плагинами для YAML)
  • PyCharm (встроенная поддержка)
  • Sublime Text (с подсветкой YAML)

Типичные ошибки в YAML и как их избежать

Несмотря на простоту, при работе с YAML легко допустить ошибки и опечатки. В этом разделе мы обсудим такие ошибки и дадим рекомендации по написанию чистых и корректных файлов. Именно поэтому стоит пользоваться линтером или продвинутым редактором!

Смешение табов и пробелов

YAML опирается на пробелы для отступов — никогда не смешивайте пробелы и табуляции. Табуляции просто сломают ваш YAML. Это осознанное решение: разные системы по-разному интерпретируют табы, поэтому во избежание проблем предпочтительны пробелы.

Неверные отступы

Обеспечьте единообразные отступы, чтобы избежать ошибок парсинга. Поскольку отступы — единственный способ обозначить иерархию в YAML, неправильный парсинг может вызвать проблемы в коде. Легко «спрятать» пару key: value не в том месте, поэтому следите за отступами!

Забытые кавычки для специальных символов

Используйте кавычки для строк со специальными символами или пробелами. Например, обратные слэши, запятые, восклицательные знаки и т. п. требуют кавычек, чтобы интерпретироваться как строки.

path: "/home/user/documents"
message: "Hello, World!"

Используя корректную валидацию, структурированное редактирование и Python-библиотеку PyYAML, вы сможете эффективно работать с файлами YAML и избегать распространённых ошибок.

Заключение

YAML — мощный и одновременно простой формат, широко применяемый в конфигурациях, сериализации данных и автоматизации инфраструктуры. Понимая его синтаксис, структуру и лучшие практики, вы сможете эффективно использовать YAML в самых разных задачах.

Если вы хотите применить YAML на практике:

FAQs

Является ли YAML универсальным?

Пока источник или целевая система умеют читать YAML, это жизнеспособный и полезный способ сериализации и передачи данных. Убедитесь, что вы отправляете данные в систему, способную обрабатывать YAML.

Безопасен ли YAML? Могут ли YAML-файлы представлять угрозу безопасности?

Сам по себе YAML — это всего лишь формат данных, но риски безопасности возникают при разборе недоверенных YAML-файлов. Метод по умолчанию yaml.load() в библиотеке PyYAML может выполнять произвольный код, встроенный в YAML, что опасно. Вместо этого всегда используйте yaml.safe_load(), чтобы предотвратить непреднамеренное исполнение вредоносного кода. Аналогично, при использовании YAML в приложениях обеспечьте строгую проверку схемы, чтобы избежать уязвимостей безопасности.

Поддерживает ли YAML переменные окружения?

Да! Хотя YAML сам по себе не обрабатывает переменные окружения, многие инструменты (например, Docker Compose и Kubernetes) позволяют ссылаться на переменные окружения внутри YAML-файлов.

Как работать с комментариями в YAML?

YAML поддерживает однострочные комментарии с помощью символа #, но не поддерживает многострочные комментарии. Если нужны многострочные комментарии, распространённый обходной путь — использовать фиктивный ключ, например _comment. Однако это лишь соглашение и не будет проигнорировано парсерами YAML, если только ваше приложение специально не фильтрует такие ключи.

Темы
Дата-инжиниринг

Узнайте больше о дата-инжиниринге на этих курсах!

Track

Инженер данных на Python

40 ч
Получите востребованные навыки для эффективного сбора, очистки и управления данными, а также планирования и мониторинга пайплайнов, чтобы выделиться в сфере data engineering.
ПодробнееRight Arrow
Начать Курс
Смотрите большеRight Arrow