Введення в YAML для початківців

Якщо ви є розробником, що створює API, то, ймовірно, ви вже зустрічалися з YAML, навіть якщо ваш основний формат для серіалізації даних – це JSON.

YAML вирізняється зрозумілим синтаксисом і є корисним інструментом у вашому арсеналі розробника.

Давайте розглянемо його основи.

Серіалізація інформації

Коли вам потрібно передати структуру даних або об’єкт через мережу, наприклад, Інтернет, їх необхідно перетворити у спеціальний формат для зручності читання та зберігання. Цей процес називається серіалізацією і є ключовим для роботи в Інтернеті. Типовий приклад – зчитування даних з бази даних та їх відправка через мережу.

Серед форматів серіалізації є JSON, YAML та XML.

У цій статті ми сфокусуємося на YAML, і після її прочитання ви будете знайомі з ним та матимете чітке уявлення про його основи.

Що таке YAML і яка його користь?

YAML – це формат для серіалізації даних, а не мова розмітки.

Основною перевагою YAML є його читабельність і простота запису. Якщо вам потрібен конфігураційний файл, який легко читати, YAML є ідеальним вибором. Він не є повною заміною JSON, оскільки кожен формат має своє застосування, але знання YAML є дуже корисним.

Ще однією перевагою YAML є підтримка різних типів даних, таких як записи, масиви, словники, списки та скалярні значення. Він добре підтримується у багатьох популярних мовах програмування, зокрема JavaScript, Python, Ruby та Java.

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: “BIGYAN”

AGE: 16

Перший тип даних є логічним, він може мати значення true або false. Значення GPA є числом з плаваючою комою. YAML також підтримує нульовий тип даних, як у випадку з “ISSUES”. Значення “Name” є рядком, який потрібно взяти в подвійні або одинарні лапки. YAML також дозволяє використовувати багаторядкові рядки для зручності читання.

Багаторядкові та однорядкові рядки

---

About: >

 Hello this is Ryan

 From Alabama and I like to

 Play soccer.

Символ > дозволяє записувати один рядок у декілька рядків. По суті, це однорядковий опис, хоча він займає кілька рядків.

Ми також можемо використовувати | для багаторядкових рядків:

About: |

 This is a multiline string

 And will be printed line wise.

Списки

Списки мають велике значення в YAML.

Приклад списку:

---

- apple

- banana

- mango

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

---

Fruits:

 Apples

 Banana

 Guava 

Для зіставлення скаляра зі списком потрібне вкладення. Ми також можемо мати кілька рівнів вкладення, як у прикладі:

Automobiles:

 Car:

     Hyundai

     Volkswagen

     Ford

Тут “Automobiles” вкладено в “Car”, а Hyundai вкладено в “Automobiles”. Це приклад багаторівневого вкладення. Можна створювати стільки рівнів вкладення, скільки потрібно.

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

Ми можемо використовувати бібліотеку 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 націлений на ті ж цілі, що і XML, але має мінімалістичний синтаксис, який відрізняється від XML.

Файли YAML можна створювати для фіксованих структур даних, використовуючи команди друку, які записують дані та їх YAML структуру. Однак, для складних ієрархічних даних краще використовувати спеціалізовані інструменти YAML. За допомогою регулярних виразів прості YAML файли (наприклад, пари ключ-значення) легко аналізувати.