YAML — язык, который нужен для упорядоченного хранения данных. Он применяется для создания файлов конфигурации и хорошо работает с любым языком программирования. Понятный синтаксис и гибкость делают его популярным среди разработчиков. В этой статье расскажем об особенностях синтаксиса YAML, изучим варианты его применения.
Синтаксис
В сообществе YAML не считают только языком разметки. Он рассматривается и для систематизации. Это позволяет отличать его от других языков. Обычно он указывается в двух расширениях файлов — .yml и .yaml. Оба они приняты и идентичны по функциональности. Разработчики регулярно используют YAML для работы с настройками приложений, сервисов или платформ. Формат файла Docker Compose и конфигурации Kubernetes служат подходящей иллюстрацией. У YAML есть функции, заимствованные из Perl, C, XML, HTML и других языков программирования. YAML также считается расширенным набором JSON, поэтому файлы JSON доступны в YAML.
Синтаксис YAML удобен для чтения и понимания, подходит для конфигурации и сериализации. Базовая структура файла YAML включает пары ключ-значение, скаляры, последовательности и сопоставления, которые вместе образуют строительные блоки документов YAML.
Ключ-значение. Между словами в паре стоят двоеточие и пробел. При этом ключ находится слева, а значение — справа. Эта структура обеспечивает прямое представление атрибутов данных и их значений. Пример:
myName: “Inna”
myJob: “Software Engineer”
myAge: 29
myWeightKG: 58
Массивы. Элементы внутри инфраструктуры массива разделяются либо дефисами (-), либо запятыми, заключенными в квадратные скобки.
Строки. Это последовательность символов, заключенная в кавычки (', ").
Числа. Выглядят как числовые значения без кавычек.
Скаляры. Это все данные на странице. Скаляр может быть логическим свойством, например true, целым числом (например, 5) или строкой текста, предложением или названием приложения.
Скаляры в программировании часто называют переменными. Если бы вы составляли список типов животных, это были бы их названия. Большинство скаляров не заключаются в кавычки, но если вы вводите строку, в которой используются знаки препинания и другие элементы, которые можно спутать с синтаксисом YAML (тире, двоеточия и т. д.), можно заключить эти данные в одинарные или двойные кавычки.
Последовательности. Представляют собой списки элементов, обозначаемые тире (-).
Словари. Их еще называют картами или mapping. Словари представляют собой неупорядоченный список пар ключ-значение, единственным ограничением которого будет уникальность каждого ключа.
Комментарии. Они важны в каждом языке разработки ПО, документе. В YAML пользователь может указывать комментарии с помощью символа #.
Отступы. Как и язык программирования Python, YAML структурирован посредством отступов в файле. Такая практика уменьшает объем кода, но требует от пользователей внимания. Например, иногда перед каждой парой ключ-значение нужно поставить четыре пробела или две табуляции.
Ключевые особенности
YAML стал популярным по нескольким причинам: простота языка, совместимость с другими сервисами и возможность оставлять комментарии.
Легко читать и писать
Синтаксис напоминает структуры естественного языка. Его простота и минималистский дизайн понятны и для разработчиков, и для нетехнических пользователей, улучшают понимание работы и уменьшают количество ошибок.
Гибкость и расширяемость
В YAML доступна произвольная вложенность. Она нужна для предоставления массивных структур данных. Язык можно расширить с помощью аннотаций и схем, которые обеспечивают дополнительную проверку данных.
Типизированные данные
YAML не считается строго типизированным языком, но у него есть поддержка аннотации для определения типов данных. Спецификация YAML имеет минимальный запас гибкости, что повышает ее надежность.
Комментарии
Их удобно добавлять в файлы YAML при помощи символа #. Комментарии незаметны при обработке информации, но важны для документирования и повышения удобства чтения кода.
Поддержка различных платформ
В YAML доступна совместимость различных систем и языков программирования. Это облегчает беспрепятственный обмен данными и взаимодействие между различными платформами и средами.
Использование
YAML может использоваться с разными языками, он применяется для работы с данными и обмена документацией. Простой формат повышает ясность документации.
YAML используют в оркестрации и управлении конфигурациями. В методах DevOps файлы YAML служат образцами для выявления последовательностей действий и настроек. Эти файлы используются для точного описания шагов и процедур, необходимых для автоматизации. Их применение обеспечивает более понятное представление сложных рабочих процессов.
YAML позволяет создавать файлы развертывания приложений, в которых указаны настройки приложений, зависимости, ограничения ресурсов. Файлы YAML помогают уменьшить количество ошибок при тестировании и повысить скорость доставки приложений за счет контроля версий и автоматизации.
Язык применяют в конвейерах непрерывной интеграции и непрерывной доставки (CI/CD). Подобно настройке и развертыванию инфраструктуры, файлы YAML используются для определения этапов и целей конвейера. Они помогают автоматизировать процесс CI/CD.
Kubernetes — платформа оркестрации контейнеров с открытым исходным кодом, используемая для автоматизированного развертывания, масштабирования и управления. Kubernetes работает на основе «состояний». Файлы YAML можно использовать для создания ресурсов Kubernetes, таких как модули, объекты и развертывания. Язык применяют для указания и передачи желаемого состояния объектов Kubernetes.
Пример
Home Assistant — сервис домашней автоматизации с открытым исходным кодом. Он применяет синтаксис YAML для лучшей настройки. Хотя большинство интеграций можно настроить через пользовательский интерфейс, некоторые интеграции требуют редактирования файла Configuration.yaml.
В следующем примере показано вложение коллекции сопоставлений в сопоставление. В Home Assistant это приведет к созданию двух датчиков, каждый из которых использует платформу MQTT, но имеет разные значения для своего state_topic:
sensor:
- platform: mqtt
state_topic: "sensor/topic"
- platform: mqtt
state_topic: "sensor2/topic"
Заключение
Универсальная применимость и кроссплатформенная совместимость YAML особенно подходят новичкам. Язык ценят за ясность, простоту, универсальность, часто используют в DevOps, у него активное онлайн-сообщество и хорошая совместимость с множеством ресурсов.