Якщо ви є розробником, що створює 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 файли (наприклад, пари ключ-значення) легко аналізувати.