Ukoliko ste programer koji razvija API-je, verovatno ste se susreli sa YAML formatom, iako vam je možda primarni alat za serijalizaciju JSON.
YAML poseduje intuitivnu sintaksu i predstavlja koristan jezik za proširenje vašeg razvojnog alata.
Hajde da istražimo osnove YAML-a.
Serijalizacija podataka
Kada je potrebno preneti strukturu podataka ili objekat putem računarskih mreža, na primer internetom, neophodno je konvertovati ih u specifičan format radi lakšeg čitanja i čuvanja. Ovaj proces je opštepoznat kao serijalizacija i od velikog je značaja na webu. Čest primer upotrebe serijalizacije jeste čitanje podataka iz baza podataka i njihovo prosleđivanje preko interneta.
Neki od popularnih formata za serijalizaciju uključuju JSON, YAML i XML.
U ovom tekstu ćemo se fokusirati na YAML i po njegovom završetku, steći ćete jasno razumevanje i uvod u YAML.
Šta je YAML i koja je njegova svrha?
YAML je format za serijalizaciju podataka, čiji naziv predstavlja akronim „YAML Ain’t Markup Language“.
Glavna prednost korišćenja YAML-a leži u njegovoj čitljivosti i jednostavnosti pisanja. Ukoliko je potrebna konfiguraciona datoteka koja je laka za razumevanje, YAML je pravi izbor. YAML nije potpuna zamena za JSON, jer JSON i XML imaju svoju primenu, ali je svakako korisno naučiti YAML.
Još jedna prednost YAML-a je podrška različitim tipovima podataka, uključujući nizove, rečnike, liste i skalarne vrednosti. Takođe, ima dobru podršku za popularne programske jezike kao što su JavaScript, Python, Ruby, Java, itd.
YAML se oslanja isključivo na razmake, osetljiv je na velika i mala slova, kao i na razmak. Tabulatori nisu univerzalno podržani. YAML datoteke imaju ekstenziju .yaml.
Osnovna YAML sintaksa
Svaka YAML datoteka započinje sa „—“ što označava početak YAML dokumenta.
Prilikom kreiranja API-ja, često se koristimo funkcijom mapiranja koju YAML nudi.
Sledeći primeri ilustruju mapiranje u YAML-u.
--- name: James boy: yes GPA: 3.41
Sintaksa mapiranja je ključ: vrednost. Obratite pažnju na razmake, koji su od ključne važnosti u YAML-u, za razliku od JSON-a ili XML-a.
YAML takođe podržava različite tipove podataka kao što su karakteri, stringovi, celi brojevi, decimalni brojevi i kolekcije kao što su nizovi i liste, koje se formiraju od osnovnih tipova podataka.
Tipovi podataka u YAML-u
Pogledajmo sledeći primer YAML-a:
--- MALE: FALSE GPA: 3.61 ISSUES: NULL NAME: “BIGYAN” AGE: 16
Prvi tip podataka je logički, gde vrednost može biti tačno ili netačno. Vrednost GPA je decimalni broj. YAML takođe podržava null tip podataka, kao što je prikazano za „Issues“. Vrednost „Name“ je string koji mora biti naveden unutar duplih ili jednostrukih navodnika. YAML takođe omogućava više redova u stringu radi čitljivosti.
Više redni i jedno redni stringovi
--- About: > Hello this is Ryan From Alabama and I like to Play soccer.
Simbol „>“ omogućava da se string napiše u više redova. Rečenica je zapravo jedan opis, iako je zapisana u više redova.
Takođe, možemo imati više redova stringa ako koristimo „|“ simbol, kao što sledi:
About: | This is a multiline string And will be printed line wise.
Liste
Liste imaju važnu ulogu u YAML-u.
Primer liste je dat u nastavku.
--- - apple - banana - mango
Mapiranje skalarnih vrednosti na liste je prikazano ispod, što je veoma korisno u većini konfiguracionih datoteka.
--- Fruits: Apples Banana Guava
Ugnježdavanje je neophodno za mapiranje skalara na liste. Takođe, možemo imati više ugnježdenih lista, kao što je prikazano u sledećem primeru.
Automobiles: Car: Hyundai Volkswagen Ford
Ovde su automobili ugnježdeni u kategoriju „Automobiles“, a „Hyundai“ u „Car“. Ovo je primer višestrukog ugnježdavanja. Možemo imati ugnježdenja na više nivoa po potrebi.
Subjects: Engineering: Mechanical engineering: Design and manufacture Automobile Control and Design Civil engineering: Structural engineering Hydropower Arts: Medieval Modern Painting
YAML takođe pruža & i * simbole kao sidra i reference na sidra kako bi se izbeglo dupliranje. Oni su ključni u konfiguracionim datotekama u okvirima kao što je Ruby on Rails kako bi YAML datoteke bile manje.
Pogledajte sledeći primer:
details: &details name: "John" age: 18
profession: engineer << : * details
što je ekvivalentno:
profession: engineer name: "John" age: 18
YAML u Python-u
Python podržava YAML, uz pomoć modula kao što su ruamel i pyyaml. Prvo instalirajte pyyaml:
pip install pyyaml
Za ovaj tutorijal, kreirajte datoteku pod nazivom details.yaml:
name: "john" age:18 gender: male
Kreirajte drugu datoteku pod nazivom feed.yaml sa sledećim sadržajem:
sports: football basketball cricket baseball --- countries: Brazil Lithuania Australia USA
Počnimo sa čitanjem datoteke details.yaml:
import yaml with open('details.yaml') as f: data = yaml.load(f, Loader=yaml.FullLoader) print(data)
Nakon pokretanja datoteke details.py, dobijamo sledeći izlaz:
$ 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)
Pisanje YAML-a u datoteke u Python-u
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 implementacija u Node.js
Node.js je serverski jezik, a serijalizacija podataka ima ključnu ulogu u razvojnom procesu.
Za ovaj vodič, razmotrimo sledeću datoteku example.yaml:
name:John age:18 Hobbies: Hobby1:Football Hobby2:BasketBall Hobby3:Hockey Job: -System administrator -Programmer
Dostupna je npm biblioteka za Node.js pod nazivom js-yaml. Instalirajte modul:
npm install js-yaml
Zatim koristimo js-yaml modul u našoj datoteci:
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 }
Zaključak
U savremenim programskim okvirima i aplikacijama, gde se podaci čuvaju ili distribuiraju, YAML se sve češće koristi u konfiguracionim datotekama. YAML ima sličnu primenu kao Extensible Markup Language (XML), ali ima minimalnu sintaksu koja se namerno razlikuje od XML-a.
YAML datoteke se mogu kreirati za fiksne strukture podataka pomoću komandi za štampanje koje pišu i podatke i YAML-ovu posebnu dekoraciju. Ipak, namenski YAML emiter je preporučljiv za kompleksnije hijerarhijske podatke. Slično tome, osnovne YAML datoteke (npr. parovi ključ-vrednost) se mogu lako raščlaniti regularnim izrazima.