Что такое YAML

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

Основы синтаксиса YAML

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

В YAML ключи и значения разделяются двоеточием, сами пары ключ-значение отделяются переносом строки. Списки представляются с использованием дефиса, а вложенные структуры данных создаются с помощью отступов.

Комментарии в YAML начинаются с символа решетки # и могут использоваться для пояснения структуры данных или для временного исключения части информации.

Какие типы узлов поддерживает YAML

Формат YAML в основном использует 3 типа узлов:

  1. Maps/Dictionaries - называют отображениями (mappings) Содержимое узла отображения представляет собой неупорядоченный набор пар ключ/значение, с одним ограничением, что каждый из ключей является уникальным.

  2. Arrays/Lists - называют последовательностями (sequences) Содержимое узла последовательности представляет собой упорядоченную серию узлов. Тут последовательность может содержать один и тот же узел более одного раза, и даже саму себя.

  3. Literals - содержат данные типа строки, числа, булевы значения и т.д

Например, курсы программирования Code-basics используют описанные выше узлы для описания структуры урока следующим образом:

  name: Название урока
  theory: |
    Здесь текст урока
  instructions: описание практического задания
  tips:
    - cсылка 1
    - ссылка 2
  defintions:
    - name: определение 1
      description: описание определения 1
    - name: определение 2
      description: описание определения 2

Рассмотрим более подробно эту структуру и остановимся на каждом виде узла:

Отступы

Для создания вложенной структуры используются пробелы, каждый следующий уровень содержит отступ на 2 пробела больше, чем предыдущий. Очень важно понимать, что tab использовать нельзя, это должны быть именно пробелы.

  defintions: # уровень вложенности 1
    - name: определение 1 # уровень вложенности 2, 2 пробела в качестве 
      description: описание определения 1 # уровень вложенности 2, 2 пробела в качестве 

Отображения (mappings)

Отображения используются, чтобы соединить пары ключ-значение.

  name: Условная конструкция (if) # mapping
  theory: Условные конструкции позволяют... # mapping

Последовательности (sequences)

Последовательности формируются с использованием дефиса - и пробела. Здесь важно помнить, что они упорядоченные и могут быть вложены с использованием отступов.

  name: Название урока
  theory: |
    Здесь текст урока
  instructions: описание практического задания
  tips:
    # последовательность
    - cсылка 1
    - ссылка 2
  defintions:
    # последовательность
    - name: определение 1
      description: описание определения 1
    - name: определение 2
      description: описание определения 2

Литералы (literals)

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

name: John Doe # string
age: 25 # number
isStudent: True # bolean

Обратите внимание, что строковые литералы не требуют наличия кавычек. Но они могут пригодиться в случае, если текст содержит какие-либо специальные символы, которые могут быть интерпретированы неверно. Например:

message1: Hexlet & partners # возникает ошибка, так как  & является спец символом
message2: "Hexlet & partners" # здесь все в порядке, потому что есть кавычки

Если значением ключа является текстовый блок, например, из нескольких строк, то можно воспользоваться | (pipe character), который сообщает, что следующий текст надо интерпретировать как блок строк:

message: |
  это сообщение
  состоит
  из нескольких
  строк

Сферы применения

Благодаря своей простоте и гибкости YAML находит применение в различных областях разработки программного обеспечения и интеграции систем:

  • Файлы конфигурации: YAML используется для создания конфигурационных файлов приложений и сервисов. Он позволяет легко описывать параметры конфигурации, настройки и свойства, используемые при развертывании и настройке приложений.
  • Сериализация данных: YAML служит форматом для сериализации и десериализации структур данных, и используется для обмена данными между различными системами или компонентами, что обеспечивает простоту взаимодействия.
  • Спецификации API: YAML часто используется для определения спецификаций и документации API, например, OpenAPI. Он обеспечивает краткий и понятный способ определения конечных точек, схем запросов/ответов и других деталей, связанных с API.
  • Инфраструктура как код (IaC): YAML часто используется для описания конфигураций инфраструктуры. Например, он используется в плейбуках Anisble для описания задач, которые необходимо выполнить на удаленных хостах; в файлах Docker Compose для определения и управления много контейнерными приложениями; в файлах конфигурации Terraform. YAML позволяет декларативно определять ресурсы инфраструктуры и их конфигурации.
  • Управление тестированием и конфигурацией: YAML используется в средах тестирования и инструментах для определения тестовых примеров, тестовых данных и тестовых конфигураций.

Заключение

YAML - мощный и удобный инструмент для представления структурированных данных. Благодаря своей простоте и интуитивно понятном синтаксисе его можно легко читать и писать, что делает его подходящим для различных случаев использования.

В контексте IaC (Инфраструктура как код) YAML позволяет декларативно определять ресурсы инфраструктуры и их конфигурации, что упрощает управление инфраструктурой и автоматизирует развертывание.

Footnotes

  1. Cериализация - это процесс преобразования сложных структур данных в форму, пригодную для сохранения или передачи.

Исходный код (github)
Ольга Пеженкова
comments powered by Disqus