Контакты

Россия 196084 , Санкт-Петербург, ул. Заозерная, дом №8, корпус 2, Литера А, офис 212

Мы работаем по будням с 10.00 до 19.00 +7 (495) 215-53-16 +7 (812) 748-20-96 info@notissimus.com
Социальные сети

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

Сериализация данных

Когда вы хотите отправить какую-то структуру данных или объект по компьютерным сетям, например по Интернету, вам необходимо преобразовать ее в специальный формат для чтения и хранения. Этот процесс известен как сериализация и имеет огромное значение в Интернете. Чаще всего сериализация используется при чтении данных из баз данных и передаче их через Интернет. Некоторые форматы сериализации включают JSON, YAML, XML. В этой статье я расскажу о YAML, и в конце статьи вы сможете работать с YAML и будете иметь четкое представление о нем.

Что такое YAML?

YAML – это формат сериализации данных, который расшифровывается как YAML ain’t Markup language. Основное преимущество использования YAML – это удобство чтения и записи. Если у вас есть конфигурационный файл, который должен быть проще для чтения человеком, лучше использовать YAML. YAML не является полной заменой JSON, поскольку JSON и XML тоже имеют свое место; тем не менее, изучать YAML полезно. Еще одно преимущество YAML – поддержка различных типов данных, таких как регистры, массивы, словари, списки и скаляры. Он хорошо поддерживает самые популярные языки, такие как JavaScriptPython, Ruby, Java и другие. В YAML поддерживаются только пробелы, и он чувствителен к регистру, а также к пробелам. Табуляции не принимаются повсеместно. Файл YAML имеет расширение .yaml.

Основной синтаксис YAML

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

---
name: James
boy: yes
GPA: 3.41

Синтаксис отображения – ключ: значение. (Обратите внимание на пробел, он очень важен в YAML, в отличие от JSON или XML. YAML также поддерживает такие типы данных, как символы, строки, целые числа, плавающие значения, а также коллекции, такие как массивы, списки, которые строятся из базовых типов данных.

Типы данных в YAML

Ниже приведен пример YAML:

---

MALE: FALSE

GPA: 3.61

ISSUES: NULL

NAME: “HARRY”

AGE: 16

Первый тип данных – булево, у которого может быть два значения: true или false. Значение GPA имеет плавающую точку. YAML также поддерживает тип данных null, как и в случае с “Issues”. Значение “Name” – это строка, которую необходимо заключить в двойные или одинарные кавычки. YAML также поддерживает многострочную строку и строку из нескольких строк как одну для удобства чтения.

Многострочные и однострочные строки

---

About: >

 Hello this is Ryan

 From Alabama and I like to

 Play soccer.

Символ <i>></i> позволяет записывать однострочную строку в несколько строк. Предложение на самом деле является однострочным описанием, хотя у нас несколько строк. Мы также можем иметь несколько строк, если используем символ |, как это разрешено:

About: |

 This is a multiline string

 And will be printed line wise.

Список

Списки очень важны в YAML. Пример списка приведен ниже.

---

- apple

- banana

- mango

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

---

Fruits:

 Apple

 Banana

 Guava 

Вложенность необходима для отображения скаляра в список. Мы также можем иметь несколько вложенных списков, как показано в примере ниже.

Automobiles:

 Car:

     Hyundai

     Volkswagen

     Ford

Здесь автомобили вложены в автомобили, а Hyundai вложена в автомобили. Это пример множественной вложенности. Мы можем использовать множественную вложенность сколько угодно.

Subjects:

     Engineering:

       Mechanical engineering:

         Design and manufacture

         Automobile

         Control and Design

       Civil engineering:

         Structural engineering

         Hydropower

       Arts:

         Medieval

         Modern

         Painting

В YAML также предусмотрены символы & и * в качестве якорей и ссылок на якорь, чтобы избежать дублирования. Они необходимы в конфигурационных файлах таких фреймворков, как Ruby on Rails, чтобы сделать YAML-файл меньше. Смотрите пример ниже.

details: &details
    name: "John"
    age: 18

profession: engineer

<< : * details

что эквивалентно:

profession: engineer

name: "John"

age: 18

YAML в Python

Python поддерживает YAML, включая некоторые модули, такие как ruamel и pyyaml. Начните с установки pyyaml

pip install pyyaml

Для учебника создайте файл с именем details.yaml

name: "john"

age:18

gender: male

Создайте еще один файл с именем feed.yaml со следующим содержимым:

sports:

 football
 basketball
 cricket
 baseball

---
countries:
 Brazil
 Lithuania
 Australia
 USA

Давайте начнем с чтения файла details.yaml

import yaml

with open('details.yaml') as f:
    
    data = yaml.load(f, Loader=yaml.FullLoader)
    print(data)

Запустив файл details.py, мы получим следующий результат

 $ python details.py
{'name': "john", 'age': 18, 'gender': male}
import yaml

with open(r'feed.yaml') as file:
    # The FullLoader parameter handles the conversion from YAML
    # scalar values to Python the dictionary format
    fruits_list = yaml.load(file, Loader=yaml.FullLoader)

    print(fruits_list)

Запись YAML в файлы в Python

import yaml

dict_file = [{'sports' : ['hockey', 'rugby', 'tennis', 'ping pong', 'football', 'badminton']},
{'countries' : ['Jamaica', 'England', 'Nepal', 'Netherlands', 'South Africa', 'Bolivia', 'Portugal']}]

with open(r'E:data.yaml', 'w') as file: #create a new yaml file 
    data = yaml.dump(dict_file, file)

Реализация YAML в Node.js

Node.js – это язык обработки данных на стороне сервера, и сериализация данных имеет огромное значение в процессе разработки.

Для нашего учебника рассмотрим следующий файл example.yaml:

name:John

age:18

Hobbies:

 Hobby1:Football

 Hobby2:BasketBall

 Hobby3:Hockey

Job:

-System administrator

-Programmer

Для Node.js у нас есть библиотека npm под названием js-yaml. Давайте начнем с установки модуля с помощью

npm install js-yaml

Затем мы используем модуль js-yaml в нашем файле.

const yaml = require('js-yaml'); //initialize js-yaml
const fs   = require('fs'); //initialize filestream

try {
  const result = yaml.load(fs.readFileSync('example.yml', 'utf8'));
  console.log(result);
} catch (e) {
  console.log(e); //catch exception
}

Заключительные слова

В современных программах, фреймворках и приложениях, где хранятся или распределяются данные, YAML становится все более распространенным в конфигурационных файлах. YAML нацелен на многие из тех же коммуникационных приложений, что и Extensible Markup Language (XML), но имеет минимальный синтаксис, который намеренно отличается от XML. Файлы YAML можно создавать для фиксированных структур данных с помощью команд печати, которые записывают как данные, так и конкретное оформление YAML. Однако для дампа различных или сложных иерархических данных предпочтительнее использовать специальный эмиттер YAML. Аналогично, с помощью регулярных выражений можно легко разобрать базовые файлы YAML (например, пары ключ-значение).