Jestliže se věnujete vývoji API, s formátem YAML jste se pravděpodobně setkali, i když je vaším primárním nástrojem pro serializaci dat JSON.
YAML se pyšní přehlednou syntaxí a je to praktický jazyk, který by neměl chybět ve vaší vývojářské sadě nástrojů.
Pojďme se společně podívat na jeho základy.
Serializace dat
Když chcete odeslat datovou strukturu nebo objekt po síti, například po internetu, musíte je převést do určitého formátu, aby byly čitelné a uchovatelné. Tento proces se nazývá serializace a je klíčový pro fungování webu. Běžným příkladem je načítání dat z databáze a jejich následný přenos webem.
Mezi oblíbené formáty pro serializaci patří JSON, YAML a XML.
V tomto článku se zaměříme na YAML, na jehož konci získáte solidní úvod do jeho fungování.
Co je YAML a proč je pro mě užitečný?
YAML je formát pro serializaci dat, jehož zkratka znamená „YAML Ain’t Markup Language“.
Hlavní výhodou YAML je jeho čitelnost a jednoduchost zápisu. Pokud potřebujete konfigurační soubor, který je snadno srozumitelný pro lidi, YAML je skvělá volba. YAML sice není kompletní náhradou za JSON a XML, protože i ty mají své výhody, ale rozhodně se vyplatí se ho naučit.
Další výhodou YAML je podpora různých datových typů, jako jsou objekty, pole, slovníky, seznamy a skalární hodnoty. Navíc má dobrou podporu v nejrozšířenějších programovacích jazycích jako JavaScript, Python, Ruby, Java a dalších.
YAML je citlivý na mezery a na velikost písmen. Taby nejsou univerzálně přijímány. Soubory YAML mají příponu .yaml.
Základní syntaxe YAML
Každý soubor YAML začíná znaky „—„, které označují jeho začátek.
Při tvorbě API je pro nás klíčová funkce mapování, kterou YAML nabízí.
Následující příklady ukazují, jak mapování v YAML vypadá.
--- name: James boy: yes GPA: 3.41
Syntaxe mapování je jednoduchá: klíč: hodnota. Důležitá je zde mezera, která je v YAML na rozdíl od JSON nebo XML zásadní.
YAML podporuje datové typy jako znaky, řetězce, celá čísla, čísla s plovoucí desetinnou čárkou a kolekce, například pole a seznamy, které se vytvářejí ze základních datových typů.
Datové typy v YAML
Podívejme se na následující příklad YAML:
--- MALE: FALSE GPA: 3.61 ISSUES: NULL NAME: “BIGYAN” AGE: 16
První datový typ je boolean, který může mít hodnotu true nebo false. GPA je číslo s plovoucí desetinnou čárkou. YAML podporuje i datový typ null, což vidíme u „ISSUES“. Hodnota „Name“ je řetězec, který je v uvozovkách. YAML umí pracovat i s víceřádkovými řetězci pro lepší čitelnost.
Víceřádkové a jednořádkové řetězce
--- About: > Hello this is Ryan From Alabama and I like to Play soccer.
Symbol „>“ nám umožňuje napsat jeden řádek na více řádků. Celá věta je tak vlastně jedním popisem, i když je zapsaná na více řádcích.
Víceřádkové řetězce můžeme vytvořit také pomocí symbolu „|“:
About: | This is a multiline string And will be printed line wise.
Seznamy
Seznamy hrají v YAML významnou roli.
Příklad seznamu:
--- - apple - banana - mango
Mapování skalárních hodnot na seznamy je důležité pro většinu konfiguračních souborů. Příklad:
--- Fruits: Apples Banana Guava
Pro mapování skaláru na seznam je nutné odsazení. Můžeme mít i vícenásobně vnořené seznamy, jak ukazuje tento příklad:
Automobiles: Car: Hyundai Volkswagen Ford
V tomto případě jsou auta vnořena do kategorie „Automobiles“ a jednotlivé značky do kategorie „Car“. Můžeme takto vnořovat libovolně hluboko.
Subjects: Engineering: Mechanical engineering: Design and manufacture Automobile Control and Design Civil engineering: Structural engineering Hydropower Arts: Medieval Modern Painting
YAML nabízí také symboly „&“ a „*“, které fungují jako kotvy a odkazy na kotvy, aby se zamezilo duplicitě. Jsou užitečné v konfiguračních souborech, například v Ruby on Rails, aby byly soubory YAML kratší.
Příklad:
details: &details name: "John" age: 18
profession: engineer << : * details
Což je ekvivalentní:
profession: engineer name: "John" age: 18
YAML v Pythonu
Python podporuje YAML pomocí knihoven jako ruamel a pyyaml. Pro začátek si nainstalujeme pyyaml:
pip install pyyaml
Pro tento tutoriál si vytvořte soubor details.yaml:
name: "john" age:18 gender: male
A další soubor feed.yaml s tímto obsahem:
sports: football basketball cricket baseball --- countries: Brazil Lithuania Australia USA
Začněme čtením souboru details.yaml:
import yaml with open('details.yaml') as f: data = yaml.load(f, Loader=yaml.FullLoader) print(data)
Po spuštění souboru details.py dostaneme tento výstup:
$ 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)
Zápis YAML do souborů v Pythonu
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)
Implementace YAML v Node.js
Node.js je server-side jazyk a serializace dat je klíčová pro proces vývoje.
Pro náš tutoriál použijeme tento soubor example.yaml:
name:John age:18 Hobbies: Hobby1:Football Hobby2:BasketBall Hobby3:Hockey Job: -System administrator -Programmer
Pro Node.js máme k dispozici npm balíček js-yaml. Nainstalujeme ho pomocí:
npm install js-yaml
A v našem souboru pak použijeme modul js-yaml:
const yaml = require('js-yaml'); //inicializace js-yaml const fs = require('fs'); //inicializace filestream try { const result = yaml.load(fs.readFileSync('example.yml', 'utf8')); console.log(result); } catch (e) { console.log(e); //zachycení výjimky }
Závěr
YAML si získává stále větší oblibu v konfiguračních souborech moderních programovacích rámců a aplikací, kde se data ukládají nebo distribuují. YAML má podobné využití jako Extensible Markup Language (XML), ale jeho syntaxe je minimální a záměrně odlišná od XML.
Soubory YAML můžeme vytvářet pro pevné datové struktury pomocí příkazů pro výpis, které zapisují data a specifické dekorace YAML. Pro ukládání různorodých a komplexních hierarchických dat je však vhodnější specializovaný generátor YAML. Jednoduché soubory YAML (například páry klíč-hodnota) lze snadno analyzovat pomocí regulárních výrazů.