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
Оба формата используются для сериализации данных, но имеют разные сильные стороны:
| Параметр | JSON | YAML |
|---|---|---|
| Приоритет | Приложения | Человек |
| Читаемость | Простая | Лёгкая |
| Поддержка комментариев | Нет | Да |
| Размер файла | Больше | Меньше |
| Кросс-платформенность | Универсальная | Универсальная |
| Основное применение | API, веб-приложения | Конфигурация, DevOps |
JSON часто предпочитают для обмена данными между приложениями благодаря универсальной поддержке. YAML преобладает в конфигурационных файлах благодаря лучшей читаемости и поддержке комментариев.
Преимущества YAML
Простота синтаксиса. Значительно проще, чем XML, и более читаемый, чем JSON.
Поддержка комментариев. Позволяет добавлять пояснения прямо в файлы конфигурации.
Минимум символов. Не требует фигурных скобок и квадратных скобок для всех структур.
Встроенная поддержка типов данных. Поддерживает разнообразные типы, включая даты и специальные математические значения.
Лёгкое управление версионированием. Легко видеть различия между версиями конфигов благодаря читаемому формату.
YAML остаётся неотъемлемой частью современного DevOps и облачной разработки, обеспечивая идеальный баланс между простотой и функциональностью для конфигурационных файлов и автоматизации.
