Skip to content
This repository was archived by the owner on Dec 26, 2024. It is now read-only.

Commit 7e313aa

Browse files
authored
Merge pull request #656 from ola-9/yaml
yaml guide
2 parents 9fed216 + 5794ef4 commit 7e313aa

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed

data/posts/ru/2024-05-14-yaml.md

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
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

Comments
 (0)