In der Welt der Softwareentwicklung, insbesondere bei der Erstellung von APIs, ist YAML ein Format, das Entwicklern häufig begegnet, selbst wenn JSON das bevorzugte Serialisierungswerkzeug ist.
YAML zeichnet sich durch seine leicht verständliche Syntax aus und stellt eine wertvolle Ergänzung zum Repertoire eines jeden Entwicklers dar.
Dieser Artikel führt Sie in die grundlegenden Konzepte von YAML ein.
Daten-Serialisierung
Wenn Datenstrukturen oder Objekte über Netzwerke, wie das Internet, übertragen werden sollen, ist eine Umwandlung in ein spezielles Format notwendig, um sie korrekt lesen und speichern zu können. Dieser Prozess wird als Serialisierung bezeichnet und ist im Web von zentraler Bedeutung. Ein gängiges Beispiel ist das Auslesen von Daten aus Datenbanken und deren Weitergabe über das Internet.
Es gibt verschiedene Serialisierungsformate, darunter JSON, YAML und XML.
Im Fokus dieses Artikels steht YAML. Am Ende werden Sie ein solides Verständnis von YAML haben und damit arbeiten können.
Was genau ist YAML und welche Vorteile bietet es?
YAML ist ein Daten-Serialisierungsformat, wobei die Abkürzung für „YAML Ain’t Markup Language“ steht.
Der größte Vorteil von YAML ist seine ausgezeichnete Lesbarkeit und die einfache Erstellung. Besonders bei Konfigurationsdateien, die leicht von Menschen lesbar sein sollen, empfiehlt sich YAML. Es ist zwar kein vollständiger Ersatz für JSON, da auch JSON und XML ihre Anwendungsbereiche haben, aber YAML zu beherrschen, ist dennoch vorteilhaft.
Ein weiterer Pluspunkt von YAML ist die Unterstützung verschiedener Datentypen wie Fälle, Arrays, Wörterbücher, Listen und Skalare. Zudem ist die Unterstützung für populäre Programmiersprachen wie JavaScript, Python, Ruby und Java sehr gut.
YAML arbeitet ausschließlich mit Leerzeichen und unterscheidet zwischen Groß- und Kleinschreibung sowie der Anzahl der Leerzeichen. Tabulatoren sind nicht überall erlaubt. YAML-Dateien werden üblicherweise mit der Erweiterung .yaml gespeichert.
Grundlegende YAML-Syntax
Jede YAML-Datei beginnt mit —, was den Start der Datei markiert.
Besonders relevant für die API-Entwicklung ist die Mapping-Funktion von YAML.
Hier sind Beispiele für die Mapping-Syntax in YAML:
--- name: James boy: yes GPA: 3.41
Die Mapping-Syntax folgt dem Schema Schlüssel: Wert. Beachten Sie die Wichtigkeit der Leerzeichen in YAML, im Gegensatz zu JSON oder XML.
YAML unterstützt verschiedene Datentypen, darunter Zeichen, Strings, Ganzzahlen, Fließkommawerte und Sammlungen wie Arrays und Listen, die aus den grundlegenden Datentypen zusammengesetzt sind.
Datentypen in YAML
Hier ist ein Beispiel für eine YAML-Datei:
--- MALE: FALSE GPA: 3.61 ISSUES: NULL NAME: “BIGYAN” AGE: 16
Der erste Datentyp ist ein boolescher Wert, der entweder wahr oder falsch sein kann. Der GPA-Wert ist ein Fließkommawert. YAML unterstützt auch den Null-Datentyp, wie im Fall von „ISSUES“. Der Wert von „Name“ ist ein String, der in doppelten oder einfachen Anführungszeichen stehen muss. YAML ermöglicht auch mehrzeilige Strings zur besseren Lesbarkeit.
Mehrzeilige und einzeilige Strings
--- About: > Hello this is Ryan From Alabama and I like to Play soccer.
Mit dem Symbol > können Sie einen String über mehrere Zeilen schreiben. Der gesamte Text wird jedoch als eine einzige Zeile interpretiert.
Mit dem Symbol | können Sie auch mehrzeilige Strings definieren:
About: | This is a multiline string And will be printed line wise.
Listen
Listen sind in YAML ein wichtiges Element.
Hier ist ein Beispiel für eine Liste:
--- - apple - banana - mango
Die Zuordnung von Skalaren zu Listen ist oft in Konfigurationsdateien zu finden, wie das folgende Beispiel zeigt:
--- Fruits: Apples Banana Guava
Verschachtelung ist wichtig, um Skalare Listen zuzuordnen. Mehrere verschachtelte Listen sind auch möglich:
Automobiles: Car: Hyundai Volkswagen Ford
Hier ist „Car“ in „Automobiles“ verschachtelt, und die Automarken sind wiederum in „Car“ verschachtelt. Dieses Beispiel zeigt eine Mehrfachverschachtelung, die beliebig oft wiederholt werden kann.
Subjects: Engineering: Mechanical engineering: Design and manufacture Automobile Control and Design Civil engineering: Structural engineering Hydropower Arts: Medieval Modern Painting
YAML verwendet auch die Symbole & und * als Anker und Referenzen, um Duplikate zu vermeiden. Diese sind in Konfigurationsdateien von Frameworks wie Ruby on Rails von zentraler Bedeutung, um die YAML-Dateien kompakter zu halten.
Hier ist ein Beispiel:
details: &details name: "John" age: 18
profession: engineer << : * details
Dies ist äquivalent zu:
profession: engineer name: "John" age: 18
YAML in Python
Python bietet volle YAML-Unterstützung, inklusive der Module ruamel und pyyaml. Beginnen wir mit der Installation von pyyaml:
pip install pyyaml
Für das folgende Tutorial erstellen wir eine Datei namens details.yaml mit folgendem Inhalt:
name: "john" age:18 gender: male
Erstellen wir eine weitere Datei namens feed.yaml mit diesem Inhalt:
sports: football basketball cricket baseball --- countries: Brazil Lithuania Australia USA
Beginnen wir mit dem Auslesen der details.yaml-Datei:
import yaml with open('details.yaml') as f: data = yaml.load(f, Loader=yaml.FullLoader) print(data)
Nach dem Ausführen der details.py-Datei erhalten wir die folgende Ausgabe:
$ 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-Dateien mit Python erstellen
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 in Node.js
Node.js ist eine serverseitige Sprache, und die Daten-Serialisierung ist auch hier im Entwicklungsprozess sehr wichtig.
Für unser Tutorial erstellen wir eine Datei namens example.yaml mit dem folgenden Inhalt:
name:John age:18 Hobbies: Hobby1:Football Hobby2:BasketBall Hobby3:Hockey Job: -System administrator -Programmer
Es gibt eine npm-Bibliothek namens js-yaml. Beginnen wir mit der Installation:
npm install js-yaml
Jetzt können wir das js-yaml-Modul in unserer Datei verwenden:
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 }
Fazit
YAML gewinnt in modernen Programmier-Frameworks und Anwendungen zunehmend an Bedeutung, insbesondere in Konfigurationsdateien. YAML adressiert ähnliche Kommunikationsanwendungen wie XML, unterscheidet sich jedoch durch eine bewusst minimale Syntax.
YAML-Dateien können mithilfe von Druckbefehlen für feste Datenstrukturen erstellt werden. Für komplexere hierarchische Datenstrukturen empfiehlt sich jedoch ein dedizierter YAML-Emitter. Einfache YAML-Dateien (wie Schlüssel-Wert-Paare) lassen sich mit regulären Ausdrücken gut parsen.