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): 25, 0xA1F (шестнадцатеричное), 0754 (восьмеричное)​
  • Числа с плавающей точкой (float): 25.5, 1.23e+4 (экспоненциальное)​
  • Логические значения (boolean): true, false, yes, no​
  • Строки: "текст" или просто текст (без кавычек, если не содержит спецсимволов)​
  • 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 и облачной разработки, обеспечивая идеальный баланс между простотой и функциональностью для конфигурационных файлов и автоматизации.​

Виктория М.
Оцените автора
( Пока оценок нет )
СА|БУК
Главная
Поиск
Са.Ба.Ка
Меню