Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

YAML за 5 минут: синтаксис и основные возможности

Отредактировано

YAML — это язык для сериализации данных, который используют DevOps и дата-сайентисты. Рассказываем про синтаксис YAML-файлов.

177К открытий222К показов

YAML — это язык для сериализации данных, который отличается простым синтаксисом и позволяет хранить сложноорганизованные данные в компактном и читаемом формате. Рассказываем, как это пригодится для DevOps и виртуализации за несколько минут.

Что такое YAML?

YAML — это язык для хранения информации в формате понятном человеку. Его название расшифровывается как, «Ещё один язык разметки». Однако, позже расшифровку изменили на — «YAML не язык разметки», чтобы отличать его от настоящих языков разметки.

Язык похож на XML и JSON, но использует более минималистичный синтаксис при сохранении аналогичных возможностей. YAML обычно применяют для создания конфигурационных файлов в программах типа Инфраструктура как код (Iac), или для управления контейнерами в работе DevOps.

Чаще всего с помощью YAML создают протоколы автоматизации, которые могут выполнять последовательности команд записанные в YAML-файле. Это позволяет вашей системе быть более независимой и отзывчивой без дополнительного внимания разработчика.

Всё больше и больше компаний используют DevOps и виртуализацию, поэтому YAML — это must have для современного разработчика. Кроме того, YAML легко интегрировать, благодаря поддержке Python (используя PyYAML библиотеку, Docker или Ansible) и других популярных технологий.

YAML vs JSON vs XML

YAML (.yml)

Особенности YAML:

  • понятный человеку код;
  • минималистичный синтаксис;
  • заточен под работу с данными;
  • встроенный стиль, похожий на JSON (YAML является его надмножеством);
  • поддерживает комментарии;
  • поддерживает строки без кавычек;
  • считается «чище», чем JSON;
  • дополнительные возможности (расширяемые типы данных, относительные якоря и маппинг типов с сохранением порядка ключей).

Применение: YAML лучше всего подходит для приложений с большим объемом данных, которые используют DevOps конвейеры или виртуальные машины. Кроме того, улучшение читаемости данных пригодится в командах, где разработчики часто с ними взаимодействуют.

JSON

Особенности JSON:

  • труднее читать;
  • явные, строгие требования к синтаксису;
  • встроенный стиль, похожий на YAML (некоторые парсеры YAML могут читать JSON-файлы);
  • нет комментариев;
  • строкам нужны двойные кавычки.

Применение: JSON используется в веб-разработке — это лучший формат для сериализации и передачи данных через HTTP-соединение.

XML

Особенности XML:

  • труднее читать;
  • более многословный;
  • действует как язык разметки, а YAML как язык для форматирования данных;
  • больше возможностей чем у YAML, например атрибуты тегов;
  • более жёсткая схема документа.

Применение: XML идеален для сложных проектов, которым требуется тонкий контроль над валидацией, схемой и пространством имён. Язык обладает плохой читаемостью, требует большей пропускной способности и ёмкости хранилища, но обеспечивает беспрецедентный контроль.

Характерные особенности YAML

Поддержка мультидокументов

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

Документы разделяются тремя дефисами (—):

			---
player: playerOne
action: attack (miss)
---
player: playerTwo
action: attack (hit)
---
		

Поддержка комментариев

YAML позволяет добавлять комментарии после символа #, как в Python:

			key: #Это однострочный комментарий
   - value line 5
   #Это
   #многострочный комментарий
 - value line 13
		

Легко читаемый синтаксис

В синтаксисе YAML-файлов используется система отступов, как в Python. Необходимо использовать пробелы, а не табуляцию, чтобы избежать путаницы.

Это избавляет от лишних символов, которые есть в JSON и XML (кавычки, скобки, фигурные скобки).

В итоге читаемость файла значительно повышается.

YAML

			#YAML
 Imaro:
 author: Charles R. Saunders
 language: English
 publication-year: 1981
 pages: 224
		

JSON

			{
   "Imaro": {
      "author": "Charles R. Saunders",
      "language": "English",
      "publication-year": "1981",
      "pages": 224
   }
}
		

Явная и неявная типизация

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

			# Это значение преобразуется в int:
is-an-int: !!int 14.10
# Превращает любое значение в строку:
is-a-str: !!str 67.43
# Значение должно быть boolean:
is-a-bool: !!bool yes
		

Отсутствие исполняемых файлов

YAML не содержит исполняемых файлов. Поэтому можно безопасно обмениваться YAML-файлами с третьей стороной.

Чтобы использовать исполняемые файлы, YAML нужно интегрировать с другими языками, например Perl или Java.

Синтаксис YAML

В языке есть несколько базовых концепций, которые позволяют обрабатывать большинство данных.

Пары ключ-значение

Большинство данных в YAML-файле хранятся в виде пары ключ-значение, где ключ — это имя пары, а значение — связанные данные.

Скаляры и маппинг

Скаляр представляет собой одно значение, которому соответствует имя.

YAML поддерживает стандартные типы: int и float, boolean, string и null.

Они могут быть представлены в разных видах: шестнадцатеричном, восьмеричном или экспоненциальном. Также существуют специальные типы для математических сущностей, такие как: бесконечность, -бесконечность и NAN.

			integer: 25
hex: 0x12d4 #равно 4820
octal: 023332 #равно 9946
float: 25.0
exponent: 12.3015e+05 #равно 1230150.0
boolean: Yes
string: "25"
infinity: .inf # преобразуется в бесконечность
neginf: -.Inf #преобразуется в минус бесконечность
not: .NAN #Not a Number
null: ~
		

Строки

Строка — это коллекция символов, которая может содержать слово или предложение. Можно использовать либо |, для отдельных строк, либо >, для параграфов.

Кавычки в YAML не нужны.

			str: Hello World
data: |
   Это
   Отдельные
   Строки
data: >
   Это 
   один параграф
   текста
		

Последовательности

Последовательности — это структуры данных похожие на списки или массивы, которые хранят несколько значений под одним ключом. Они определяются с помощью отступов или [].

			shopping: 
- milk
- eggs
- juice
		

Однострочные последовательности выглядят лаконичнее, но хуже читаются.

			shopping: [milk, eggs, juice]
		

Словари

Словари — это коллекции пар ключ-значение, которые хранятся под одним ключом. Они позволяют разделить данные на логические категории.

			Employees: 
- dan:
    name: Dan D. Veloper
    job: Developer
    team: DevOps
- dora:
   name: Dora D. Veloper
   job: Project Manager
   team: Web Subscriptions
		

Словари могут содержать более сложные структуры, что позволяет хранить сложные реляционные данные.

Что ещё может YAML

Помимо базовых функций YAML предоставляет дополнительные возможности, позволяющие значительно упростить работу с большими и сложными структурами данных. Это особенно полезны при создании автоматизированных сценариев и шаблонов в DevOps и системах виртуализации.

Anchors (якоря)

Одна из ключевых продвинутых возможностей YAML — это использование якорей и ссылок. С помощью этой функции можно многократно использовать одни и те же фрагменты данных в разных местах файла, что значительно сокращает объём кода и упрощает его сопровождение.

Например, если несколько блоков данных имеют одинаковые значения, их можно определить один раз с помощью якоря, а затем ссылаться на них в других местах:

			default: &default_settings
  language: English
  country: Russia

user1:
  <<: *default_settings
  name: Alice

user2:
  <<: *default_settings
  name: Ivan

		

Здесь определён якорь &default_settings, который содержит общие настройки для пользователей. С помощью ссылки *default_settings мы передаём эти настройки пользователям user1 и user2, добавляя уникальные данные для каждого.

Templates (шаблоны)

YAML поддерживает создание шаблонов данных, что особенно полезно при работе с конфигурационными файлами для контейнеризации (например, в Docker) или при написании сценариев для таких инструментов, как Ansible и Kubernetes. Шаблоны позволяют повторно использовать часто встречающиеся структуры данных и упрощают управление конфигурацией.

Например, в Docker Compose файле YAML можно создать шаблон для конфигурации нескольких контейнеров:

			services:
  webapp: &app
    image: myapp:latest
    environment:
      - DATABASE_URL=mysql://db:3306/mydb
  api:
    <<: *app
    ports:
      - "8000:8000"
  worker:
    <<: *app
    command: celery -A app worker

		

Расширенные последовательности и маппинг

Последовательности (sequences) — это структуры данных, которые позволяют хранить несколько значений под одним ключом. Последовательности можно рассматривать как списки или массивы в других языках программирования. YAML поддерживает два типа синтаксиса для последовательностей: многострочный и однострочный.

Вот пример одностройчной последовательности:

			shopping_list: [milk, eggs, bread, butter]

		

Маппинг (mapping) представляет собой ассоциативный массив или словарь, который хранит пары ключ-значение. Это одна из самых распространенных структур данных в YAML, поскольку позволяет организовать данные логически и по категориям.

Вот как выглядит простой маппинг:

			person:
  name: John
  age: 30
  city: New York

		

Подобно последовательностям, маппинг можно записать в однострочном формате:

			person: {name: John, age: 30, city: New York}

		

Расширенные типы данных (timestamp, null и т. д.)

В YAML есть поддержка не только стандартных типов данных, таких как строки, числа и булевы значения, но и более продвинутых типов, включая временные метки (timestamp), бинарные данные, а также null.

Пример использования временных меток:

			date: 2023-10-01T12:30:00Z

		

YAML — это мощный и гибкий инструмент для работы с конфигурационными файлами и данными. Его возможности, такие как якоря, шаблоны, поддержка многострочных строк и расширенных типов данных, делают его эффективным инструментов для использования в DevOps, контейнеризации и инфраструктурных проектах. В отличие от JSON и XML, формат YAML предлагает лучшую читаемость и гибкость, что важно для разработки и сопровождения крупных проектов.

Следите за новыми постами
Следите за новыми постами по любимым темам
177К открытий222К показов