Programiści tworzący interfejsy API z pewnością zetknęli się z YAML, nawet jeśli ich głównym narzędziem do serializacji jest JSON.
YAML to język o przyjaznej składni, który warto mieć w swoim zestawie narzędzi programistycznych.
Zapoznajmy się z fundamentami YAML.
Serializacja danych
Gdy zachodzi potrzeba przesłania struktury danych lub obiektu przez sieć, taką jak Internet, konieczne jest przekształcenie ich do określonego formatu, umożliwiającego odczyt i zapis. Ten proces, znany jako serializacja, odgrywa kluczową rolę w komunikacji sieciowej. Typowym przykładem jest pobieranie danych z baz danych i przesyłanie ich w sieci.
Do popularnych formatów serializacji zaliczamy między innymi JSON, YAML i XML.
Ten artykuł skupia się na YAML. Po jego przeczytaniu zdobędziesz solidne podstawy do pracy z tym formatem.
Czym jest YAML i jakie korzyści oferuje?
YAML to format serializacji danych, co oznacza, że nie jest językiem znaczników.
Główną zaletą YAML jest jego czytelność i łatwość zapisu. Jeśli potrzebujesz pliku konfiguracyjnego, który będzie zrozumiały dla człowieka, YAML jest idealnym wyborem. Nie jest on całkowitym zamiennikiem JSON, ponieważ każdy z tych formatów ma swoje zastosowania. Niemniej jednak, warto nauczyć się YAML.
Kolejną zaletą YAML jest obsługa różnorodnych typów danych, takich jak wartości logiczne, tablice, słowniki, listy oraz wartości skalarne. Ponadto, YAML jest dobrze wspierany przez popularne języki programowania jak JavaScript, Python, Ruby czy Java.
YAML bazuje na spacji, jest wrażliwy na wielkość liter i spacje. Tabulatory nie są powszechnie akceptowane. Pliki YAML mają rozszerzenie .yaml.
Podstawowa składnia YAML
Każdy plik YAML zaczyna się od `—`, co sygnalizuje początek dokumentu YAML.
Podczas tworzenia API, szczególnie przydatną funkcją YAML jest mapowanie.
Poniżej znajduje się przykład mapowania w YAML:
--- name: James boy: yes GPA: 3.41
Składnia mapowania to `klucz: wartość`. Zwróć szczególną uwagę na spację po dwukropku, jest to kluczowe w YAML, w odróżnieniu od JSON lub XML.
YAML obsługuje również różne typy danych, takie jak znaki, ciągi, liczby całkowite, liczby zmiennoprzecinkowe oraz kolekcje, w tym tablice i listy, zbudowane z podstawowych typów danych.
Typy danych w YAML
Spójrzmy na poniższy przykład YAML:
--- MALE: FALSE GPA: 3.61 ISSUES: NULL NAME: “BIGYAN” AGE: 16
Pierwszy typ danych to wartość logiczna, która może przyjmować wartości prawda lub fałsz. `GPA` jest liczbą zmiennoprzecinkową. YAML obsługuje również wartość `null`, tak jak w przypadku `ISSUES`. Wartość `NAME` jest ciągiem znaków, który należy ująć w cudzysłów (podwójny lub pojedynczy). YAML umożliwia także zapis ciągów wielowierszowych, zarówno jako jeden ciąg, jak i z zachowaniem struktury wierszy dla lepszej czytelności.
Ciągi wielowierszowe i jednowierszowe
--- About: > Hello this is Ryan From Alabama and I like to Play soccer.
Symbol `>` pozwala na zapisanie pojedynczego ciągu znaków w wielu wierszach. Chociaż ciąg jest rozłożony na kilka wierszy, jest on traktowany jako jednowierszowy.
Możemy też zachować strukturę wielowierszową za pomocą symbolu `|`:
About: | This is a multiline string And will be printed line wise.
Listy
Listy są ważnym elementem YAML.
Oto przykład listy:
--- - apple - banana - mango
Poniżej przykład mapowania ze skalara na listę, co jest często spotykane w plikach konfiguracyjnych:
--- Fruits: Apples Banana Guava
Zagnieżdżanie jest konieczne do mapowania skalara na listę. Możemy również tworzyć zagnieżdżone listy, jak w poniższym przykładzie:
Automobiles: Car: Hyundai Volkswagen Ford
Tutaj `samochody` zawierają kategorię `Car`, a marki `Hyundai`, `Volkswagen` i `Ford` są zagnieżdżone w `Car`. To przykład wielokrotnego zagnieżdżania. Poziom zagnieżdżenia nie jest ograniczony.
Subjects: Engineering: Mechanical engineering: Design and manufacture Automobile Control and Design Civil engineering: Structural engineering Hydropower Arts: Medieval Modern Painting
YAML udostępnia również symbole `&` i `*` do tworzenia kotwic i odwołań do nich, co pozwala uniknąć duplikowania treści. Jest to szczególnie przydatne w plikach konfiguracyjnych w frameworkach takich jak Ruby on Rails, gdzie pomaga zmniejszyć rozmiar pliku YAML.
Spójrz na przykład poniżej:
details: &details name: "John" age: 18
profession: engineer << : * details
Powyższe jest równoważne z:
profession: engineer name: "John" age: 18
YAML w Pythonie
Python oferuje wsparcie dla YAML poprzez moduły takie jak `ruamel` i `pyyaml`. Zacznij od zainstalowania `pyyaml`:
pip zainstaluj pyyaml
Na potrzeby tego samouczka, utwórz plik `details.yaml` o następującej zawartości:
name: "john" age:18 gender: male
Utwórz też plik `feed.yaml`:
sports: football basketball cricket baseball --- countries: Brazil Lithuania Australia USA
Rozpocznijmy od odczytu pliku `details.yaml`:
import yaml with open('details.yaml') as f: data = yaml.load(f, Loader=yaml.FullLoader) print(data)
Po uruchomieniu pliku `details.py` uzyskamy taki wynik:
$ python details.py {'name': "john", 'age': 18, 'gender': male}
import yaml with open(r'feed.yaml') as file: # Parametr FullLoader obsługuje konwersję wartości skalarnych YAML na format słownika Pythona fruits_list = yaml.load(file, Loader=yaml.FullLoader) print(fruits_list)
Zapisywanie YAML w Pythonie
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: #tworzymy nowy plik yaml data = yaml.dump(dict_file, file)
Implementacja YAML w Node.js
Node.js jest środowiskiem po stronie serwera, a serializacja danych odgrywa istotną rolę w procesie tworzenia aplikacji.
Rozważmy przykładowy plik `example.yaml`:
name:John age:18 Hobbies: Hobby1:Football Hobby2:BasketBall Hobby3:Hockey Job: -System administrator -Programmer
Do Node.js dostępna jest biblioteka npm o nazwie js-yaml. Zacznijmy od instalacji modułu:
npm install js-yaml
Teraz możemy użyć modułu `js-yaml` w naszym kodzie:
const yaml = require('js-yaml'); //inicjalizacja js-yaml const fs = require('fs'); //inicjalizacja filestream try { const result = yaml.load(fs.readFileSync('example.yml', 'utf8')); console.log(result); } catch (e) { console.log(e); //obsługa wyjątków }
Podsumowanie
W nowoczesnych frameworkach i aplikacjach, gdzie dane są przechowywane i przesyłane, YAML staje się coraz popularniejszy, szczególnie w plikach konfiguracyjnych. YAML jest używany w wielu tych samych sytuacjach co Extensible Markup Language (XML), ale cechuje się uproszczoną składnią, która różni się od XML.
Pliki YAML można tworzyć dla prostych struktur danych przy użyciu poleceń drukowania, które zapisują zarówno dane, jak i odpowiednie formatowanie YAML. Niemniej jednak, dedykowany emiter YAML jest preferowany do zapisu złożonych danych hierarchicznych. Podobnie, w przypadku prostych plików YAML (np. pary klucz-wartość) łatwo jest przeprowadzić analizę z użyciem wyrażeń regularnych.
newsblog.pl