|
| 1 | +--- |
| 2 | +title: Что такое YAML |
| 3 | +description: В этом гайде разберемся как устроен YAML, зачем он нужен и как используется |
| 4 | +author: Ольга Пеженкова |
| 5 | +hidden: true |
| 6 | +--- |
| 7 | + |
| 8 | +YAML (YAML Ain't Markup Language) - это формат сериализации [^1] данных, который используется для представления структурированных данных в человекочитаемом формате. Считается, что в отличие от таких форматов, как JSON или XML, YAML - это более простая и интуитивно понятная структура. Также важно отметить, что YAML в отличие от многих других форматов не является языком разметки, а предназначен для предоставления данных в структурированном виде. |
| 9 | + |
| 10 | +[^1]: Cериализация - это процесс преобразования сложных структур данных в форму, пригодную для сохранения или передачи. |
| 11 | + |
| 12 | +## Основы синтаксиса YAML |
| 13 | + |
| 14 | +Одной из ключевых особенностей YAML является использование пробелов вместо специальных символов для формирования структур данных. |
| 15 | + |
| 16 | +В YAML ключи и значения разделяются двоеточием, сами пары ключ-значение отделяются переносом строки. Списки представляются с использованием дефиса, а вложенные структуры данных создаются с помощью отступов. |
| 17 | + |
| 18 | +Комментарии в YAML начинаются с символа решетки `#` и могут использоваться для пояснения структуры данных или для временного исключения части информации. |
| 19 | + |
| 20 | +## Какие типы узлов поддерживает YAML |
| 21 | + |
| 22 | +Формат YAML в основном использует 3 типа узлов: |
| 23 | + |
| 24 | +1. _Maps/Dictionaries_ - называют отображениями (mappings) |
| 25 | + Содержимое узла отображения представляет собой неупорядоченный набор пар ключ/значение, с одним ограничением, что каждый из ключей является уникальным. |
| 26 | + |
| 27 | +2. _Arrays/Lists_ - называют последовательностями (sequences) |
| 28 | + Содержимое узла последовательности представляет собой упорядоченную серию узлов. Тут последовательность может содержать один и тот же узел более одного раза, и даже саму себя. |
| 29 | + |
| 30 | +3. _Literals_ - содержат данные типа строки, числа, булевы значения и т.д |
| 31 | + |
| 32 | + |
| 33 | +Например, курсы программирования [Code-basics](https://code-basics.com/ru) используют описанные выше узлы для описания структуры урока следующим образом: |
| 34 | + |
| 35 | +```yml |
| 36 | + name: Название урока |
| 37 | + theory: | |
| 38 | + Здесь текст урока |
| 39 | + instructions: описание практического задания |
| 40 | + tips: |
| 41 | + - cсылка 1 |
| 42 | + - ссылка 2 |
| 43 | + defintions: |
| 44 | + - name: определение 1 |
| 45 | + description: описание определения 1 |
| 46 | + - name: определение 2 |
| 47 | + description: описание определения 2 |
| 48 | +``` |
| 49 | +
|
| 50 | +Рассмотрим более подробно эту структуру и остановимся на каждом виде узла: |
| 51 | +
|
| 52 | +### Отступы |
| 53 | +
|
| 54 | +Для создания вложенной структуры используются пробелы, каждый следующий уровень содержит отступ на 2 пробела больше, чем предыдущий. Очень важно понимать, что `tab` использовать нельзя, это должны быть именно пробелы. |
| 55 | + |
| 56 | +```yml |
| 57 | + defintions: # уровень вложенности 1 |
| 58 | + - name: определение 1 # уровень вложенности 2, 2 пробела в качестве |
| 59 | + description: описание определения 1 # уровень вложенности 2, 2 пробела в качестве |
| 60 | +``` |
| 61 | + |
| 62 | +### Отображения (mappings) |
| 63 | + |
| 64 | +Отображения используются, чтобы соединить пары ключ-значение. |
| 65 | + |
| 66 | +```yml |
| 67 | + name: Условная конструкция (if) # mapping |
| 68 | + theory: Условные конструкции позволяют... # mapping |
| 69 | +``` |
| 70 | + |
| 71 | + |
| 72 | +### Последовательности (sequences) |
| 73 | + |
| 74 | +Последовательности формируются с использованием дефиса `-` и пробела. Здесь важно помнить, что они упорядоченные и могут быть вложены с использованием отступов. |
| 75 | + |
| 76 | +```yml |
| 77 | + name: Название урока |
| 78 | + theory: | |
| 79 | + Здесь текст урока |
| 80 | + instructions: описание практического задания |
| 81 | + tips: |
| 82 | + # последовательность |
| 83 | + - cсылка 1 |
| 84 | + - ссылка 2 |
| 85 | + defintions: |
| 86 | + # последовательность |
| 87 | + - name: определение 1 |
| 88 | + description: описание определения 1 |
| 89 | + - name: определение 2 |
| 90 | + description: описание определения 2 |
| 91 | +``` |
| 92 | + |
| 93 | +### Литералы (literals) |
| 94 | + |
| 95 | +В качестве литералов могут использоваться такие типы данных как строки, цифры, и булевы значения. |
| 96 | + |
| 97 | +```YAML |
| 98 | +name: John Doe # string |
| 99 | +age: 25 # number |
| 100 | +isStudent: True # bolean |
| 101 | +``` |
| 102 | + |
| 103 | +Обратите внимание, что строковые литералы не требуют наличия кавычек. Но они могут пригодиться в случае, если текст содержит какие-либо специальные символы, которые могут быть интерпретированы неверно. Например: |
| 104 | + |
| 105 | +```YAML |
| 106 | +message1: Hexlet & partners # возникает ошибка, так как & является спец символом |
| 107 | +message2: "Hexlet & partners" # здесь все в порядке, потому что есть кавычки |
| 108 | +``` |
| 109 | + |
| 110 | +Если значением ключа является текстовый блок, например, из нескольких строк, то можно воспользоваться `|` (pipe character), который сообщает, что следующий текст надо интерпретировать как блок строк: |
| 111 | + |
| 112 | +```YAML |
| 113 | +message: | |
| 114 | + это сообщение |
| 115 | + состоит |
| 116 | + из нескольких |
| 117 | + строк |
| 118 | +``` |
| 119 | + |
| 120 | +## Сферы применения |
| 121 | + |
| 122 | +Благодаря своей простоте и гибкости YAML находит применение в различных областях разработки программного обеспечения и интеграции систем: |
| 123 | + |
| 124 | +- *Файлы конфигурации*: YAML используется для создания конфигурационных файлов приложений и сервисов. Он позволяет легко описывать параметры конфигурации, настройки и свойства, используемые при развертывании и настройке приложений. |
| 125 | +- _Сериализация данных_: YAML служит форматом для сериализации и десериализации структур данных, и используется для обмена данными между различными системами или компонентами, что обеспечивает простоту взаимодействия. |
| 126 | +- _Спецификации API_: YAML часто используется для определения спецификаций и документации API, например, OpenAPI. Он обеспечивает краткий и понятный способ определения конечных точек, схем запросов/ответов и других деталей, связанных с API. |
| 127 | +- _Инфраструктура как код (IaC)_: YAML часто используется для описания конфигураций инфраструктуры. Например, он используется в плейбуках Anisble для описания задач, которые необходимо выполнить на удаленных хостах; в файлах Docker Compose для определения и управления много контейнерными приложениями; в файлах конфигурации Terraform. YAML позволяет декларативно определять ресурсы инфраструктуры и их конфигурации. |
| 128 | +- _Управление тестированием и конфигурацией_: YAML используется в средах тестирования и инструментах для определения тестовых примеров, тестовых данных и тестовых конфигураций. |
| 129 | + |
| 130 | +## Заключение |
| 131 | + |
| 132 | +YAML - мощный и удобный инструмент для представления структурированных данных. Благодаря своей простоте и интуитивно понятном синтаксисе его можно легко читать и писать, что делает его подходящим для различных случаев использования. |
| 133 | + |
| 134 | +В контексте IaC (Инфраструктура как код) YAML позволяет декларативно определять ресурсы инфраструктуры и их конфигурации, что упрощает управление инфраструктурой и автоматизирует развертывание. |
0 commit comments