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

Здесь я хотел бы взглянуть на основные функции YAML и причины, по которым он широко используется в инструментах DevOps.

Что такое YAML?

В начале разработки YAML получил свое название как аббревиатура от «Другой язык разметки». Позже создатели решили изменить это на «YAML не является языком разметки», чтобы отличить его от настоящих языков разметки и избежать путаницы.

Этот язык похож на XML и JSON, но использует более минималистичный синтаксис, сохраняя при этом аналогичные возможности. YAML обычно используется для создания файлов конфигурации в программах Infrastructure-as-Code (IAC) или для управления контейнерами в работе DevOps.

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

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

Теперь давайте посмотрим, в чем основные различия между YAML, JSON и XML.

YAML, JSON и XML

Во-первых, я перечислю некоторые основные особенности языка YAML, которые, по моему мнению, отличают его от остальных:

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

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

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

По сравнению с YAML, XML, например, можно описать следующими способами:

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

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

Что касается JSON, по сравнению с YAML его особенности таковы:

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

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

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

Отличительные особенности YAML

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

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

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

Легкий для чтения синтаксис В синтаксисе файлов YAML используется система отступов, аналогичная Python. Вы должны использовать пробелы, а не табуляцию, чтобы избежать путаницы. Это избавляет от лишних символов, которые есть в JSON и XML (кавычки, квадратные скобки и фигурные скобки). В результате читабельность файла значительно повышается:

#YAML
 Imaro:
 author: Aldous Huxley
 language: English
 publication-year: 1932
 pages: 311

Теперь сравните его с форматом JSON:

#JSON 
{
   "Imaro": {
      "author": "Aldous Huxley",
      "language": "English",
      "publication-year": "1932",
      "pages": 311
   }
}

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

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

key: #This is a single line comment
    - value line 2
    #This is
    #a multiline comment
  - value line 21

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

# This value has been converted to an int:
14.10 is-an-int: !!int
# Converts any value to a string:
67.43 is-a-str: !!str
# Must be a boolean value:
is-a-bool: !!yes bool

Синтаксис YAML

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

key1: value1
key2: value2
key3: value3

Строки «Строка» — это набор символов, который может содержать слово или предложение. Вы можете использовать либо | для отдельных строк, либо > для абзацев. Кавычки в YAML не нужны.

str: Hello World
data: |
    This
    Separate
    Strings
data: >
    This
    one paragraph
    text

Словари YAML поддерживает словари, которые можно представить с помощью пар "ключ-значение". Словари позволяют разделить данные на логические категории. Например:

key1: value1
key2:
  key3: value3
  key4: value4

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

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

animals:
- dog
- cat
- elephant

Однострочные последовательности выглядят более лаконично, но менее читабельны:

animals: [dog, cat, elephant]

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

integer: 25
hex: 0x12d4 #equal to 4820
octal: 023332 #equal to 9946
float: 25.0
exponent: 12.3015e+05 #equal to 1230150.0
boolean: Yes
string: "25"
infinity: .inf # converts to infinity
neginf: -.Inf #converts to minus infinity
not: .NAN #Not a Number
null: ~

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

Помимо функций, описанных выше, YAML также имеет:

  • якоря;
  • Шаблоны;
  • Взаимодействие с Docker, Ansible и др.;
  • Расширенные последовательности и отображение;
  • Расширенные типы данных (отметка времени, ноль и т. д.).

Синтаксис YAML разработан таким образом, чтобы быть простым и удобным в использовании, что делает его популярным выбором для данных, предназначенных для чтения людьми. Используя отступы и пары ключ-значение, YAML может представлять широкий спектр типов данных.

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

Еще одним преимуществом YAML является его интеграция со многими популярными инструментами DevOps, такими как Ansible, Docker и Kubernetes. Эти инструменты используют YAML для определения файлов конфигурации, что делает его ценным навыком для всех, кто работает в этих областях.

Заключение

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

Я надеюсь, что этот пост был вам полезен для изучения YAML и его возможностей! В каких областях вы использовали YAML и почему, по вашему мнению, это полезный навык? Поделитесь своими мыслями в комментариях!

P.S. Если вам нравятся мои посты и вы хотите поддержать меня, я оставлю здесь несколько ссылок :)

Поддержите меня с помощью Coinbase или Купите мне кофе!