2022-11-23 16:46 Temps de lecture : 10 min

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.

Auteur
France

Rédacteur tech, guides pratiques et astuces numériques.