diff --git a/data/posts/ru/2024-05-14-yaml.md b/data/posts/ru/2024-05-14-yaml.md new file mode 100644 index 00000000..6cffcf2f --- /dev/null +++ b/data/posts/ru/2024-05-14-yaml.md @@ -0,0 +1,134 @@ +--- +title: Что такое YAML +description: В этом гайде разберемся как устроен YAML, зачем он нужен и как используется +author: Ольга Пеженкова +hidden: true +--- + +YAML (YAML Ain't Markup Language) - это формат сериализации [^1] данных, который используется для представления структурированных данных в человекочитаемом формате. Считается, что в отличие от таких форматов, как JSON или XML, YAML - это более простая и интуитивно понятная структура. Также важно отметить, что YAML в отличие от многих других форматов не является языком разметки, а предназначен для предоставления данных в структурированном виде. + +[^1]: Cериализация - это процесс преобразования сложных структур данных в форму, пригодную для сохранения или передачи. + +## Основы синтаксиса YAML + +Одной из ключевых особенностей YAML является использование пробелов вместо специальных символов для формирования структур данных. + +В YAML ключи и значения разделяются двоеточием, сами пары ключ-значение отделяются переносом строки. Списки представляются с использованием дефиса, а вложенные структуры данных создаются с помощью отступов. + +Комментарии в YAML начинаются с символа решетки `#` и могут использоваться для пояснения структуры данных или для временного исключения части информации. + +## Какие типы узлов поддерживает YAML + +Формат YAML в основном использует 3 типа узлов: + +1. _Maps/Dictionaries_ - называют отображениями (mappings) + Содержимое узла отображения представляет собой неупорядоченный набор пар ключ/значение, с одним ограничением, что каждый из ключей является уникальным. + +2. _Arrays/Lists_ - называют последовательностями (sequences) + Содержимое узла последовательности представляет собой упорядоченную серию узлов. Тут последовательность может содержать один и тот же узел более одного раза, и даже саму себя. + +3. _Literals_ - содержат данные типа строки, числа, булевы значения и т.д + + +Например, курсы программирования [Code-basics](https://code-basics.com/ru) используют описанные выше узлы для описания структуры урока следующим образом: + +```yml + name: Название урока + theory: | + Здесь текст урока + instructions: описание практического задания + tips: + - cсылка 1 + - ссылка 2 + defintions: + - name: определение 1 + description: описание определения 1 + - name: определение 2 + description: описание определения 2 +``` + +Рассмотрим более подробно эту структуру и остановимся на каждом виде узла: + +### Отступы + +Для создания вложенной структуры используются пробелы, каждый следующий уровень содержит отступ на 2 пробела больше, чем предыдущий. Очень важно понимать, что `tab` использовать нельзя, это должны быть именно пробелы. + +```yml + defintions: # уровень вложенности 1 + - name: определение 1 # уровень вложенности 2, 2 пробела в качестве + description: описание определения 1 # уровень вложенности 2, 2 пробела в качестве +``` + +### Отображения (mappings) + +Отображения используются, чтобы соединить пары ключ-значение. + +```yml + name: Условная конструкция (if) # mapping + theory: Условные конструкции позволяют... # mapping +``` + + +### Последовательности (sequences) + +Последовательности формируются с использованием дефиса `-` и пробела. Здесь важно помнить, что они упорядоченные и могут быть вложены с использованием отступов. + +```yml + name: Название урока + theory: | + Здесь текст урока + instructions: описание практического задания + tips: + # последовательность + - cсылка 1 + - ссылка 2 + defintions: + # последовательность + - name: определение 1 + description: описание определения 1 + - name: определение 2 + description: описание определения 2 +``` + +### Литералы (literals) + +В качестве литералов могут использоваться такие типы данных как строки, цифры, и булевы значения. + +```YAML +name: John Doe # string +age: 25 # number +isStudent: True # bolean +``` + +Обратите внимание, что строковые литералы не требуют наличия кавычек. Но они могут пригодиться в случае, если текст содержит какие-либо специальные символы, которые могут быть интерпретированы неверно. Например: + +```YAML +message1: Hexlet & partners # возникает ошибка, так как & является спец символом +message2: "Hexlet & partners" # здесь все в порядке, потому что есть кавычки +``` + +Если значением ключа является текстовый блок, например, из нескольких строк, то можно воспользоваться `|` (pipe character), который сообщает, что следующий текст надо интерпретировать как блок строк: + +```YAML +message: | + это сообщение + состоит + из нескольких + строк +``` + +## Сферы применения + +Благодаря своей простоте и гибкости YAML находит применение в различных областях разработки программного обеспечения и интеграции систем: + +- *Файлы конфигурации*: YAML используется для создания конфигурационных файлов приложений и сервисов. Он позволяет легко описывать параметры конфигурации, настройки и свойства, используемые при развертывании и настройке приложений. +- _Сериализация данных_: YAML служит форматом для сериализации и десериализации структур данных, и используется для обмена данными между различными системами или компонентами, что обеспечивает простоту взаимодействия. +- _Спецификации API_: YAML часто используется для определения спецификаций и документации API, например, OpenAPI. Он обеспечивает краткий и понятный способ определения конечных точек, схем запросов/ответов и других деталей, связанных с API. +- _Инфраструктура как код (IaC)_: YAML часто используется для описания конфигураций инфраструктуры. Например, он используется в плейбуках Anisble для описания задач, которые необходимо выполнить на удаленных хостах; в файлах Docker Compose для определения и управления много контейнерными приложениями; в файлах конфигурации Terraform. YAML позволяет декларативно определять ресурсы инфраструктуры и их конфигурации. +- _Управление тестированием и конфигурацией_: YAML используется в средах тестирования и инструментах для определения тестовых примеров, тестовых данных и тестовых конфигураций. + +## Заключение + +YAML - мощный и удобный инструмент для представления структурированных данных. Благодаря своей простоте и интуитивно понятном синтаксисе его можно легко читать и писать, что делает его подходящим для различных случаев использования. + +В контексте IaC (Инфраструктура как код) YAML позволяет декларативно определять ресурсы инфраструктуры и их конфигурации, что упрощает управление инфраструктурой и автоматизирует развертывание.