Om du arbetar som utvecklare och skapar API:er, har du troligen stött på YAML, även om JSON kanske är ditt primära verktyg för serialisering.
YAML har en behaglig syntax och är ett användbart språk att ha i din utvecklingsverktygslåda.
Låt oss utforska grunderna i YAML.
Dataserialisering
När du vill överföra en datastruktur eller ett objekt över ett datornätverk, som internet, behöver du omvandla det till ett specifikt format för att kunna läsa och lagra det. Denna process kallas serialisering och är oerhört viktig inom webbutveckling. Ett vanligt exempel på serialisering är att hämta data från databaser och skicka dem över webben.
Några populära serialiseringsformat är JSON, YAML och XML.
I denna artikel kommer vi att fokusera på YAML. Efter att ha läst den kommer du att ha en grundläggande förståelse för YAML.
Vad är YAML och varför är det användbart?
YAML är ett dataserialiseringsformat som står för ”YAML Ain’t Markup Language”.
Den största fördelen med YAML är dess läsbarhet och enkelhet att skriva. Om du har en konfigurationsfil som ska vara lättläst för människor är YAML ett utmärkt val. YAML ersätter inte helt JSON eftersom JSON och XML fortfarande har sina användningsområden, men det är absolut värt att lära sig YAML.
En annan fördel är att YAML stöder olika datatyper såsom booleska värden, arrayer, dictionarys, listor och skalärer. Det finns också bra stöd för de mest populära programmeringsspråken som JavaScript, Python, Ruby, Java med flera.
YAML använder endast mellanslag och är känsligt för både skiftläge och mellanslag. Tabbar stöds inte alltid. En YAML-fil har filändelsen .yaml.
Grundläggande YAML-syntax
Varje YAML-dokument börjar med ---
, vilket markerar början av filen.
När vi utvecklar ett API är vi särskilt intresserade av en funktion i YAML som kallas mappning.
Här är ett exempel på hur mappning fungerar i YAML:
--- namn: Erik man: ja betyg: 3.85
Mappningssyntaxen är `nyckel: värde`. (Observera mellanslaget efter kolon, det är mycket viktigt i YAML, till skillnad från JSON eller XML).
YAML hanterar även datatyper som tecken, strängar, heltal, flyttal och samlingar som arrayer, listor som är uppbyggda av grundläggande datatyper.
Datatyper i YAML
Här är ett exempel på olika datatyper i YAML:
--- KVINNA: FALSKT BETYG: 3.72 PROBLEM: null NAMN: "ANNA" ÅLDER: 17
Det första värdet är en boolean, som kan vara antingen sant eller falskt. Värdet för `BETYG` är ett flyttal. YAML stöder även null-datatypen, vilket visas för `PROBLEM`. Värdet för `NAMN` är en sträng som måste anges inom dubbla eller enkla citattecken. YAML tillåter även strängar över flera rader.
Flerradiga och enradiga strängar
--- Om: > Hej, jag heter Lisa. Jag kommer från Göteborg och gillar att spela gitarr.
Symbolen > gör att du kan skriva en sträng över flera rader, men den behandlas som en enda rad. Det blir alltså en rad trots att vi har delat upp den på flera rader.
Vi kan också använda flera rader genom att använda symbolen |:
Om: | Detta är en sträng över flera rader Som kommer att skrivas ut radvis.
Listor
Listor är centrala i YAML.
Här är ett exempel på en lista:
--- - äpple - banan - mango
Mappning från en skalär till en lista visas nedan, vilket är vanligt i konfigurationsfiler.
--- Frukter: Äpplen Banan Guava
Indrag används för att koppla en skalär till en lista. Vi kan också ha kapslade listor, som i exemplet nedan.
Fordon: Bil: Volvo Saab BMW
Här är bilmodeller kapslade i kategorin ”Bil”. Detta är ett exempel på kapsling. Vi kan ha flera nivåer av kapsling.
Ämnen: Teknik: Maskinteknik: Konstruktion och tillverkning Bilindustri Styrning och design Byggnadsteknik: Konstruktion Vattenkraft Konst: Medeltida Modern Målning
YAML använder också symbolerna & och * som ankare och referenser till ankaret för att undvika repetition. Dessa är viktiga i konfigurationsfiler i ramverk som Ruby on Rails för att göra YAML-filen mer kompakt.
Här är ett exempel:
<span class="hljs-attr">detaljer:</span> <span class="hljs-meta">&detaljer</span> <span class="hljs-attr">namn:</span> <span class="hljs-string">"John" </span> ålder: 18
yrke: ingenjör << : * detaljer
Detta motsvarar:
yrke: ingenjör namn: "John" ålder: 18
YAML i Python
Python har stöd för YAML genom moduler som `ruamel` och `pyyaml`. Vi börjar med att installera `pyyaml`:
pip install pyyaml
Skapa en fil med namnet `details.yaml`:
namn: "john" ålder: 18 kön: man
Skapa en till fil med namnet `feed.yaml`:
sporter: fotboll basketboll cricket baseboll --- länder: Brasilien Litauen Australien USA
Låt oss börja med att läsa `details.yaml`:
import yaml with open('details.yaml') as f: data = yaml.load(f, Loader=yaml.FullLoader) print(data)
När vi kör `details.py` får vi följande:
$ python details.py {'namn': "john", 'ålder': 18, 'kön': 'man'}
import yaml with open(r'feed.yaml') as file: # FullLoader hanterar konverteringen från YAML # skalära värden till Python dictionary format fruits_list = yaml.load(file, Loader=yaml.FullLoader) print(fruits_list)
Skriva YAML till filer i Python
import yaml dict_file = [{'sporter' : ['hockey', 'rugby', 'tennis', 'ping pong', 'fotboll', 'badminton']}, {'länder' : ['Jamaica', 'England', 'Nepal', 'Nederländerna', 'Sydafrika', 'Bolivia', 'Portugal']}] with open(r'E:data.yaml', 'w') as file: # skapa en ny yaml-fil data = yaml.dump(dict_file, file)
YAML-implementering i Node.js
Node.js är ett serversidespråk där dataserialisering är väldigt viktigt.
Vi använder följande `example.yaml`:
namn: John ålder: 18 Hobbys: Hobby1: Fotboll Hobby2: Basketboll Hobby3: Hockey Jobb: -Systemadministratör -Programmerare
Vi kan använda npm-biblioteket js-yaml för Node.js. Installera modulen med:
npm install js-yaml
Sedan använder vi `js-yaml` i vår fil:
const yaml = require('js-yaml'); // initiera js-yaml const fs = require('fs'); // initiera filsystem try { const result = yaml.load(fs.readFileSync('example.yml', 'utf8')); console.log(result); } catch (e) { console.log(e); // fånga undantag }
Slutsats
I moderna programmeringsramverk och applikationer där data lagras eller distribueras, blir YAML allt vanligare i konfigurationsfiler. YAML har många likheter med Extensible Markup Language (XML) men har en enklare syntax som medvetet skiljer sig från XML.
YAML-filer kan skapas för fasta datastrukturer med hjälp av utskriftskommandon som skriver både data och YAML:s speciella dekorationer. En dedikerad YAML-sändare är dock att föredra för att skriva ut mer komplex hierarkisk data. På samma sätt kan grundläggande YAML-filer (som nyckel-värdepar) enkelt analyseras med reguljära uttryck.