YAML за 5 минут: синтаксис и основные возможности
YAML — это язык для сериализации данных, который используют DevOps и дата-сайентисты. Рассказываем про синтаксис YAML-файлов.
177К открытий222К показов
YAML — это язык для сериализации данных, который отличается простым синтаксисом и позволяет хранить сложноорганизованные данные в компактном и читаемом формате. Рассказываем, как это пригодится для DevOps и виртуализации за несколько минут.
Что такое YAML?
YAML — это язык для хранения информации в формате понятном человеку. Его название расшифровывается как, «Ещё один язык разметки». Однако, позже расшифровку изменили на — «YAML не язык разметки», чтобы отличать его от настоящих языков разметки.
Язык похож на XML и JSON, но использует более минималистичный синтаксис при сохранении аналогичных возможностей. YAML обычно применяют для создания конфигурационных файлов в программах типа Инфраструктура как код (Iac), или для управления контейнерами в работе DevOps.
Чаще всего с помощью YAML создают протоколы автоматизации, которые могут выполнять последовательности команд записанные в YAML-файле. Это позволяет вашей системе быть более независимой и отзывчивой без дополнительного внимания разработчика.
Всё больше и больше компаний используют DevOps и виртуализацию, поэтому YAML — это must have для современного разработчика. Кроме того, YAML легко интегрировать, благодаря поддержке Python (используя PyYAML библиотеку, Docker или Ansible) и других популярных технологий.
YAML vs JSON vs XML
YAML (.yml)
Особенности YAML:
- понятный человеку код;
- минималистичный синтаксис;
- заточен под работу с данными;
- встроенный стиль, похожий на JSON (YAML является его надмножеством);
- поддерживает комментарии;
- поддерживает строки без кавычек;
- считается «чище», чем JSON;
- дополнительные возможности (расширяемые типы данных, относительные якоря и маппинг типов с сохранением порядка ключей).
Применение: YAML лучше всего подходит для приложений с большим объемом данных, которые используют DevOps конвейеры или виртуальные машины. Кроме того, улучшение читаемости данных пригодится в командах, где разработчики часто с ними взаимодействуют.
JSON
Особенности JSON:
- труднее читать;
- явные, строгие требования к синтаксису;
- встроенный стиль, похожий на YAML (некоторые парсеры YAML могут читать JSON-файлы);
- нет комментариев;
- строкам нужны двойные кавычки.
Применение: JSON используется в веб-разработке — это лучший формат для сериализации и передачи данных через HTTP-соединение.
XML
Особенности XML:
- труднее читать;
- более многословный;
- действует как язык разметки, а YAML как язык для форматирования данных;
- больше возможностей чем у YAML, например атрибуты тегов;
- более жёсткая схема документа.
Применение: XML идеален для сложных проектов, которым требуется тонкий контроль над валидацией, схемой и пространством имён. Язык обладает плохой читаемостью, требует большей пропускной способности и ёмкости хранилища, но обеспечивает беспрецедентный контроль.
Характерные особенности YAML
Поддержка мультидокументов
Вы можете объединить несколько YAML-документов в один YAML-файл для облегчения организации файлов и парсинга данных.
Документы разделяются тремя дефисами (—):
Поддержка комментариев
YAML позволяет добавлять комментарии после символа #, как в Python:
Легко читаемый синтаксис
В синтаксисе YAML-файлов используется система отступов, как в Python. Необходимо использовать пробелы, а не табуляцию, чтобы избежать путаницы.
Это избавляет от лишних символов, которые есть в JSON и XML (кавычки, скобки, фигурные скобки).
В итоге читаемость файла значительно повышается.
YAML
JSON
Явная и неявная типизация
YAML предлагает как автоопределение типов, так и возможность явно указать тип данных. Чтобы использовать конкретный тип, нужно написать !![тип]
перед значением.
Отсутствие исполняемых файлов
YAML не содержит исполняемых файлов. Поэтому можно безопасно обмениваться YAML-файлами с третьей стороной.
Чтобы использовать исполняемые файлы, YAML нужно интегрировать с другими языками, например Perl или Java.
Синтаксис YAML
В языке есть несколько базовых концепций, которые позволяют обрабатывать большинство данных.
Пары ключ-значение
Большинство данных в YAML-файле хранятся в виде пары ключ-значение, где ключ — это имя пары, а значение — связанные данные.
Скаляры и маппинг
Скаляр представляет собой одно значение, которому соответствует имя.
YAML поддерживает стандартные типы: int и float, boolean, string и null.
Они могут быть представлены в разных видах: шестнадцатеричном, восьмеричном или экспоненциальном. Также существуют специальные типы для математических сущностей, такие как: бесконечность, -бесконечность и NAN.
Строки
Строка — это коллекция символов, которая может содержать слово или предложение. Можно использовать либо |, для отдельных строк, либо >, для параграфов.
Кавычки в YAML не нужны.
Последовательности
Последовательности — это структуры данных похожие на списки или массивы, которые хранят несколько значений под одним ключом. Они определяются с помощью отступов или [].
Однострочные последовательности выглядят лаконичнее, но хуже читаются.
Словари
Словари — это коллекции пар ключ-значение, которые хранятся под одним ключом. Они позволяют разделить данные на логические категории.
Словари могут содержать более сложные структуры, что позволяет хранить сложные реляционные данные.
Что ещё может YAML
Помимо базовых функций YAML предоставляет дополнительные возможности, позволяющие значительно упростить работу с большими и сложными структурами данных. Это особенно полезны при создании автоматизированных сценариев и шаблонов в DevOps и системах виртуализации.
Anchors (якоря)
Одна из ключевых продвинутых возможностей YAML — это использование якорей и ссылок. С помощью этой функции можно многократно использовать одни и те же фрагменты данных в разных местах файла, что значительно сокращает объём кода и упрощает его сопровождение.
Например, если несколько блоков данных имеют одинаковые значения, их можно определить один раз с помощью якоря, а затем ссылаться на них в других местах:
Здесь определён якорь &default_settings, который содержит общие настройки для пользователей. С помощью ссылки *default_settings мы передаём эти настройки пользователям user1 и user2, добавляя уникальные данные для каждого.
Templates (шаблоны)
YAML поддерживает создание шаблонов данных, что особенно полезно при работе с конфигурационными файлами для контейнеризации (например, в Docker) или при написании сценариев для таких инструментов, как Ansible и Kubernetes. Шаблоны позволяют повторно использовать часто встречающиеся структуры данных и упрощают управление конфигурацией.
Например, в Docker Compose файле YAML можно создать шаблон для конфигурации нескольких контейнеров:
Расширенные последовательности и маппинг
Последовательности (sequences) — это структуры данных, которые позволяют хранить несколько значений под одним ключом. Последовательности можно рассматривать как списки или массивы в других языках программирования. YAML поддерживает два типа синтаксиса для последовательностей: многострочный и однострочный.
Вот пример одностройчной последовательности:
Маппинг (mapping) представляет собой ассоциативный массив или словарь, который хранит пары ключ-значение. Это одна из самых распространенных структур данных в YAML, поскольку позволяет организовать данные логически и по категориям.
Вот как выглядит простой маппинг:
Подобно последовательностям, маппинг можно записать в однострочном формате:
Расширенные типы данных (timestamp, null и т. д.)
В YAML есть поддержка не только стандартных типов данных, таких как строки, числа и булевы значения, но и более продвинутых типов, включая временные метки (timestamp), бинарные данные, а также null.
Пример использования временных меток:
YAML — это мощный и гибкий инструмент для работы с конфигурационными файлами и данными. Его возможности, такие как якоря, шаблоны, поддержка многострочных строк и расширенных типов данных, делают его эффективным инструментов для использования в DevOps, контейнеризации и инфраструктурных проектах. В отличие от JSON и XML, формат YAML предлагает лучшую читаемость и гибкость, что важно для разработки и сопровождения крупных проектов.
177К открытий222К показов