Introduction à YAML pour les débutants
Si vous êtes un développeur d'API, vous avez probablement croisé YAML, même si JSON est votre outil de sérialisation principal.
YAML, avec sa syntaxe claire, est un atout précieux à ajouter à votre panoplie de développeur.
Explorons ensemble les fondements de YAML.
La Sérialisation des Données
Lorsque vous envoyez des structures de données ou des objets à travers les réseaux informatiques, comme Internet, il est nécessaire de les convertir en un format spécifique pour le stockage et la lecture. Ce processus, appelé sérialisation, est essentiel dans le monde du web. La lecture de données à partir de bases de données et leur transmission sur le web en est un exemple courant.
JSON, YAML et XML sont quelques-uns des formats de sérialisation existants.
Cet article se concentre sur YAML. À la fin de cette lecture, vous devriez être en mesure de comprendre et d’utiliser YAML avec une introduction solide.
Qu'est-ce que YAML et quels sont ses avantages ?
YAML, acronyme de "YAML Ain't Markup Language", est un format de sérialisation de données, et non un langage de balisage à proprement parler.
L'attrait majeur de YAML réside dans sa lisibilité et sa simplicité d'écriture. Si vous manipulez des fichiers de configuration nécessitant une lecture facile pour les humains, YAML est le choix idéal. Il ne se substitue pas complètement à JSON, car JSON et XML conservent leur pertinence, mais l'apprentissage de YAML est un investissement judicieux.
YAML se distingue également par sa prise en charge de divers types de données : booléens, tableaux, dictionnaires, listes et scalaires. Il est compatible avec de nombreux langages, comme JavaScript, Python, Ruby ou Java.
YAML ne prend en charge que les espaces et est sensible à la casse et à l'indentation. Les tabulations ne sont pas universellement reconnues. Les fichiers YAML portent l'extension .yaml.
La Syntaxe de Base de YAML
Tout fichier YAML débute par '---', signalant le commencement du fichier.
Lors du développement d'API, une fonctionnalité clé de YAML, appelée mappage, est particulièrement intéressante.
Voici des exemples de mappage en YAML :
--- name: James boy: yes GPA: 3.41
La syntaxe de mappage est "clé : valeur". Notez l'importance de l'espace, crucial en YAML, contrairement à JSON ou XML.
YAML prend en charge les types de données comme les caractères, les chaînes, les entiers, les nombres à virgule flottante, ainsi que les collections telles que les tableaux et les listes, construites à partir de types de données de base.
Types de Données dans YAML
Examinons l'exemple YAML suivant :
--- MALE: FALSE GPA: 3.61 ISSUES: NULL NAME: “BIGYAN” AGE: 16
Le premier type de données est un booléen, avec les valeurs "vrai" ou "faux". La valeur de GPA est un nombre à virgule flottante. YAML supporte également le type de données null, comme illustré pour "Issues". La valeur de "Name" est une chaîne qui doit être entre guillemets simples ou doubles. YAML gère également les chaînes multilignes et les chaînes de plusieurs lignes traitées comme une seule pour une meilleure lisibilité.
Chaînes Multilignes et Monolignes
--- About: > Hello this is Ryan From Alabama and I like to Play soccer.
Le symbole > permet d'écrire une chaîne sur plusieurs lignes. Cette phrase est traitée comme une description d'une seule ligne malgré sa présentation sur plusieurs lignes.
Nous pouvons aussi avoir plusieurs chaînes de lignes en utilisant le symbole | comme suit :
About: | This is a multiline string And will be printed line wise.
Listes
Les listes sont un élément fondamental de YAML.
Voici un exemple de liste :
--- - apple - banana - mango
Le mappage d'un scalaire vers des listes, crucial pour la plupart des fichiers de configuration, est illustré ci-dessous :
--- Fruits: Apples Banana Guava
L'imbrication est nécessaire pour mapper un scalaire vers une liste. On peut aussi imbriquer plusieurs listes, comme dans cet exemple :
Automobiles: Car: Hyundai Volkswagen Ford
Dans cet exemple, les voitures sont imbriquées dans les automobiles et Hyundai est imbriquée dans les voitures. Il s’agit d’un exemple d’imbrication multiple, et l’on peut imbriquer autant de niveaux que nécessaire.
Subjects:
Engineering:
Mechanical engineering:
Design and manufacture
Automobile
Control and Design
Civil engineering:
Structural engineering
Hydropower
Arts:
Medieval
Modern
Painting
YAML offre aussi les symboles '&' et '*' pour créer des ancres et des références à ces ancres, évitant ainsi les duplications. Ces éléments sont indispensables dans les fichiers de configuration de frameworks comme Ruby on Rails pour réduire la taille du fichier YAML.
Voici un exemple :
details: &details name: "John" age: 18
profession: engineer << : * details
Ce qui revient à écrire :
profession: engineer name: "John" age: 18
YAML en Python
Python prend en charge YAML via des modules tels que ruamel et pyyaml. Démarrez par l'installation de pyyaml :
pip install pyyaml
Pour ce tutoriel, créez un fichier nommé details.yaml :
name: "john" age:18 gender: male
Créez un second fichier nommé feed.yaml, avec ce contenu :
sports: football basketball cricket baseball --- countries: Brazil Lithuania Australia USA
Commençons par la lecture du fichier details.yaml :
import yaml
with open('details.yaml') as f:
data = yaml.load(f, Loader=yaml.FullLoader)
print(data)
L’exécution du fichier details.py donne le résultat suivant :
$ python details.py
{'name': "john", 'age': 18, 'gender': male}
import yaml
with open(r'feed.yaml') as file:
# Le paramètre FullLoader gère la conversion des valeurs scalaires YAML
# en format dictionnaire Python
fruits_list = yaml.load(file, Loader=yaml.FullLoader)
print(fruits_list)
Écrire du YAML en Python
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: # Crée un nouveau fichier YAML
data = yaml.dump(dict_file, file)
Implémentation de YAML en Node.js
Node.js étant un langage côté serveur, la sérialisation de données est essentielle dans le processus de développement.
Prenons l'exemple du fichier example.yaml :
name:John age:18 Hobbies: Hobby1:Football Hobby2:BasketBall Hobby3:Hockey Job: -System administrator -Programmer
Pour Node.js, une librairie npm nommée js-yaml est disponible. Commencez par installer le module :
npm install js-yaml
Utilisons maintenant le module js-yaml dans notre fichier :
const yaml = require('js-yaml'); // Initialisation de js-yaml
const fs = require('fs'); // Initialisation de filestream
try {
const result = yaml.load(fs.readFileSync('example.yml', 'utf8'));
console.log(result);
} catch (e) {
console.log(e); // Capture de l'exception
}
Conclusion
Dans les frameworks de programmation et les applications modernes où les données sont stockées ou distribuées, YAML est devenu omniprésent pour les fichiers de configuration. YAML remplit les mêmes fonctions que XML (Extensible Markup Language) pour la communication, mais sa syntaxe est minimaliste et délibérément différente de XML.
Des fichiers YAML peuvent être créés à partir de structures de données fixes en utilisant des commandes d'impression, qui écrivent à la fois les données et la décoration YAML. Cependant, un émetteur YAML dédié est préférable pour l'exportation de données hiérarchiques complexes. De même, avec des expressions régulières, les fichiers YAML de base (par exemple, les paires clé-valeur) sont facilement analysés.