Jeśli jesteś programistą piszącym interfejsy API, prawdopodobnie natknąłeś się na YAML, mimo że Twoim głównym narzędziem do serializacji może być JSON.
YAML ma własną przyjazną składnię i jest przydatnym językiem, który można dodać do swojego arsenału programistycznego.
Nauczmy się podstaw YAML.
Serializacja danych
Ilekroć chcesz wysłać jakąś strukturę danych lub obiekt przez sieci komputerowe, na przykład Internet, musisz przekształcić je w specjalny format, aby je odczytać i zapisać. Proces ten jest powszechnie znany jako serializacja i ma ogromne znaczenie w sieci. Typowym przykładem użycia serializacji jest odczytywanie danych z baz danych i przesyłanie ich przez Internet.
Niektóre formacje serializacji obejmują JSON, YAML, XML.
W tym artykule mówimy o YAML, a na końcu artykułu będziesz mógł przejść przez YAML i mieć jasne wprowadzenie do YAML.
Co to jest YAML i jakie przynosi mi korzyści?
YAML to format serializacji danych, który oznacza YAML nie jest językiem znaczników.
Główną zaletą używania YAML jest czytelność i możliwość zapisu. Jeśli masz plik konfiguracyjny, który musi być łatwiejszy do odczytania dla ludzi, lepiej jest użyć YAML. YAML nie jest całkowitym zastąpieniem JSON, ponieważ JSON i XML też mają swoje miejsce; niemniej jednak warto uczyć się YAML.
Kolejną zaletą YAML jest obsługa różnych typów danych, takich jak przypadki, tablice, słowniki, listy i skalary. Ma dobrą obsługę najpopularniejszych języków, takich jak JavaScript, Python, Ruby, Java itp.
YAML obsługuje tylko spacje i uwzględnia zarówno wielkość liter, jak i spacje. Tabulatory nie są powszechnie akceptowane. Plik YAML ma rozszerzenie .yaml.
Podstawowa składnia YAML
Każdy YAML zaczyna się od — co oznacza początek pliku YAML.
Tworząc interfejs API, interesuje nas funkcja udostępniana przez YAML, znana jako mapowanie.
Poniższe przykłady pokazują przykład mapowania w YAML.
--- name: James boy: yes GPA: 3.41
Składnia mapowania to klucz: wartość. (Zwróć uwagę na spację, jest to bardzo ważne w YAML, w przeciwieństwie do JSON lub XML.
YAML obsługuje również typy danych, takie jak znaki, łańcuchy, liczby całkowite, wartości zmiennoprzecinkowe i kolekcje, takie jak tablice, listy zbudowane z podstawowych typów danych.
Typy danych w YAML
Zobaczmy przykład YAML poniżej:
--- MALE: FALSE GPA: 3.61 ISSUES: NULL NAME: “BIGYAN” AGE: 16
Pierwszy typ danych to boolean, gdzie może mieć dwie wartości: prawda lub fałsz. Wartość GPA jest zmiennoprzecinkowa. YAML obsługuje również typ danych null, tak jak w przypadku „Problemów”. Wartość „Nazwa” to ciąg znaków, który należy umieścić w cudzysłowach podwójnych lub pojedynczych. YAML obsługuje również ciąg wielowierszowy i ciąg wielowierszowy jako pojedynczy dla czytelności.
Łańcuchy wielowierszowe i jednowierszowe
--- About: > Hello this is Ryan From Alabama and I like to Play soccer.
Symbol > umożliwia zapisanie pojedynczego ciągu wierszy w wielu wierszach. Zdanie jest w rzeczywistości opisem jednowierszowym, chociaż mamy wiele wierszy.
Możemy również mieć wiele ciągów linii, jeśli użyjemy | symbol jak dozwolony:
About: | This is a multiline string And will be printed line wise.
Lista
Listy są bardzo ważne w YAML.
Przykład listy znajduje się poniżej.
--- - apple - banana - mango
Mapowanie ze skalara na listy jest pokazane poniżej, co jest bardzo ważne dla większości plików konfiguracyjnych.
--- Fruits: Apples Banana Guava
Zagnieżdżanie jest wymagane do mapowania skalara na listę. Możemy również mieć wiele zagnieżdżonych list, jak pokazano w poniższym przykładzie.
Automobiles: Car: Hyundai Volkswagen Ford
Tutaj samochody są zagnieżdżone w samochodach, a Hyundai jest zagnieżdżony w samochodach. To jest przykład wielokrotnego zagnieżdżania. Możemy mieć wiele zagnieżdżeń, ile tylko chcemy.
Subjects: Engineering: Mechanical engineering: Design and manufacture Automobile Control and Design Civil engineering: Structural engineering Hydropower Arts: Medieval Modern Painting
YAML zapewnia również symbole & i * jako kotwice i odniesienia do kotwicy, aby uniknąć powielania. Są one niezbędne w plikach konfiguracyjnych w frameworkach takich jak Ruby on Rails, aby zmniejszyć plik YAML.
Zobacz przykład poniżej
<span class="hljs-attr">details:</span> <span class="hljs-meta">&details</span> <span class="hljs-attr">name:</span> <span class="hljs-string">"John" </span> age: 18
profession: engineer << : * details
co jest równoważne z:
profession: engineer name: "John" age: 18
YAML w Pythonie
Python obsługuje YAML, w tym niektóre moduły, takie jak ruamel i pyyaml. Zacznij od zainstalowania pyyaml
pip zainstaluj pyyaml
Na potrzeby samouczka utwórz plik o nazwie details.yaml
name: "john" age:18 gender: male
Utwórz kolejny plik o nazwie feed.yaml o następującej zawartości:
sports: football basketball cricket baseball --- countries: Brazil Lithuania Australia USA
Zacznijmy od przeczytania 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 otrzymujemy następujące dane wyjściowe
$ 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)
Zapisywanie YAML do plików 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: #create a new yaml file data = yaml.dump(dict_file, file)
Implementacja YAML w Node.js
Node.js to język przetwarzania po stronie serwera, a serializacja danych ma ogromne znaczenie w procesie programowania.
W naszym samouczku rozważmy następujący plik example.yaml:
name:John age:18 Hobbies: Hobby1:Football Hobby2:BasketBall Hobby3:Hockey Job: -System administrator -Programmer
Mamy dostępną bibliotekę npm dla Node.js o nazwie js-yaml. Zacznijmy od zainstalowania modułu wg
npm install js-yaml
Następnie używamy modułu js-yaml w naszym pliku.
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 }
Wniosek
W nowoczesnych frameworkach programistycznych i aplikacjach, w których dane są przechowywane lub dystrybuowane, YAML staje się coraz bardziej powszechny w plikach konfiguracyjnych. YAML jest przeznaczony dla wielu takich samych aplikacji komunikacyjnych jak Extensible Markup Language (XML), ale ma minimalną składnię, która celowo różni się od XML.
Pliki YAML można tworzyć dla stałych struktur danych za pomocą poleceń drukowania, które zapisują zarówno dane, jak i określoną dekorację YAML. Jednak dedykowany emiter YAML jest preferowany do zrzucania różnych lub złożonych danych hierarchicznych. Podobnie w przypadku wyrażeń regularnych podstawowe pliki YAML (np. pary klucz-wartość) są łatwo analizowane.