YAML

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

История создания

Истоки (начало 2000-х). YAML был создан Кларком Эвансом в начале 2000-х годов. Изначально название расшифровывалось как «Yet Another Markup Language» (ещё один язык разметки), что позиционировало его как конкурента XML. Однако такое позиционирование не помогло достигнуть признания из-за насыщенности рынка языками разметки.

Переименование (середина 2000-х). Эванс переосмыслил цели проекта и изменил расшифровку на «YAML Ain’t Markup Language» (YAML не язык разметки), смещая акцент с разметки на работу с данными. Таким образом, YAML позиционировался не как язык для структурирования документов (как XML), а как инструмент для удобного представления и сериализации данных.

Целевые задачи Кларка Эвангса для YAML:

  • Быть понятным человеку
  • Поддерживать структуры данных, знакомые языкам программирования
  • Быть переносимым между языками программирования
  • Использовать единую модель данных для поддержки обычного инструментария
  • Поддерживать потоковую обработку
  • Быть выразительным и расширяемым
  • Быть лёгким в реализации и использовании

Основные характеристики YAML

Простота и читаемость. YAML выглядит как структурированные данные на бумаге, что делает его интуитивным и легко понимаемым. Синтаксис основан на отступах пробелов (не допускаются табуляции!), а не на фигурных скобках или специальных символах.

Минималистичный синтаксис. Сравнивая с JSON, YAML использует меньше символов и выглядит более естественно для человека.

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

Расширяемость. YAML является расширением JSON — любой корректный JSON-файл также является корректным YAML-файлом.

Универсальность. YAML поддерживается почти всеми языками программирования и легко интегрируется, включая Python (PyYAML), Docker, Ansible и другие популярные инструменты.

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

YAML поддерживает разнообразные типы данных:

Скаляры (примитивные типы):

  • Целые числа (int): 250xA1F (шестнадцатеричное), 0754 (восьмеричное)
  • Числа с плавающей точкой (float): 25.51.23e+4 (экспоненциальное)
  • Логические значения (boolean): truefalseyesno
  • Строки: "текст" или просто текст (без кавычек, если не содержит спецсимволов)
  • Null: null или ~
  • Специальные математические значения: .inf (бесконечность), -.inf (отрицательная бесконечность), .nan (не число)

Коллекции (структурные типы):

  • Последовательности (массивы): Обозначаются дефисом и пробелом (-) или в виде потока в квадратных скобках [ ]
  • Маппинги (словари): Пары ключ-значение, разделённые двоеточием и пробелом ()

Синтаксис YAML

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

textимя: Иван
возраст: 30
город: Москва

Списки (массивы):

textфрукты:
  - яблоко
  - банан
  - апельсин

# или в потоковом формате:
фрукты: [яблоко, банан, апельсин]

Вложенные структуры:

textпользователь:
  имя: Анна
  адрес:
    город: Санкт-Петербург
    улица: Невский проспект
  телефоны:
    - +7-999-123-45-67
    - +7-999-987-65-43

Комментарии:

text# Это комментарий
название: значение  # Комментарий в конце строки

Применение YAML

YAML широко используется в современных разработке и DevOps:

Конфигурационные файлы. YAML стал основным форматом для конфигурации приложений и сервисов. Это главное применение формата в DevOps и инфраструктуре как код (IaC).

Docker и Kubernetes. Docker Compose использует YAML для описания многоконтейнерных приложений, а Kubernetes использует YAML для описания классов ресурсов и манифестов.

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

AWS и облачные сервисы. AWS CloudFormation, AWS SAM и AWS CodeBuild используют YAML для определения инфраструктуры.

Файлы конфигурации приложений. Многие приложения, включая те, что написаны на Python и Ruby, используют YAML для хранения параметров конфигурации.

JSON vs YAML

Оба формата используются для сериализации данных, но имеют разные сильные стороны:

ПараметрJSONYAML
ПриоритетПриложенияЧеловек
ЧитаемостьПростаяЛёгкая
Поддержка комментариевНетДа
Размер файлаБольшеМеньше
Кросс-платформенностьУниверсальнаяУниверсальная
Основное применениеAPI, веб-приложенияКонфигурация, DevOps

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

Преимущества YAML

Простота синтаксиса. Значительно проще, чем XML, и более читаемый, чем JSON.

Поддержка комментариев. Позволяет добавлять пояснения прямо в файлы конфигурации.

Минимум символов. Не требует фигурных скобок и квадратных скобок для всех структур.

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

Лёгкое управление версионированием. Легко видеть различия между версиями конфигов благодаря читаемому формату.

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

Евгения Спелова
Оцените автора
( Пока оценок нет )
Системный аналитик