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

yaml guide #656

Merged
merged 2 commits into from
May 14, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 134 additions & 0 deletions data/posts/ru/2024-05-14-yaml.md
Original file line number Diff line number Diff line change
@@ -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 позволяет декларативно определять ресурсы инфраструктуры и их конфигурации, что упрощает управление инфраструктурой и автоматизирует развертывание.
Loading