Для влюбленных в программирование
Скидка до 44 000₽ на все профессии до 28.02
Главная | Все статьи | Код

Что такое YAML

Без стека Время чтения статьи ~5 минут

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

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

Бесплатный курс по основам JavaScript

Учись бесплатно прямо сейчас

Основы синтаксиса 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: |
  это сообщение
  состоит
  из нескольких
  строк

Курс по системе контроля версий Git бесплатно

Записаться на бесплатный курс

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

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

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

Заключение

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

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

Аватар пользователя Валерия Белякова
Валерия Белякова 18 декабря 2024
3
Больше интересного в нашем Telegram-канале
Картинка баннера
Похожие статьи