Accéder au contenu principal

Qu'est-ce que YAML ? Comprendre les bases, la syntaxe et les cas d'utilisation

YAML est un format simple mais puissant pour les configurations, l'automatisation et la sérialisation des données. Découvrez son fonctionnement à l'aide d'exemples concrets !
Actualisé 17 févr. 2025  · 14 min de lecture

Au fil des ans, j'ai travaillé avec d'innombrables fichiers de configuration, et YAML s'est distingué par sa simplicité et sa lisibilité. Qu'il s'agisse de mettre en place des flux de travail dans Kubernetes, de définir des services dans Docker ou de structurer des demandes d'API, YAML rend les configurations complexes plus faciles à gérer. Sa structure propre, basée sur l'indentation, élimine l'encombrement de formats tels que XML tout en restant flexible.

Dans ce guide, je vous présenterai la syntaxe, la structure, les fonctionnalités avancées et les meilleures pratiques de YAML afin que vous puissiez l'utiliser en toute confiance. 

Qu'est-ce que YAML ?

YAML (Yet Another Markup Language / YAML Ain't Markup Language) est un format de sérialisation des données qui privilégie la lisibilité et la facilité d'utilisation. Alors que XML utilise un mélange de balises imbriquées de type HTML et que JSON utilise des crochets frisés et des guillemets, un peu comme les dictionnaires Python, YAML est plus concis et utilise l'indentation pour définir la structure, ce qui le rend plus convivial pour l'homme.

YAML prend en charge différents types de données, notamment les scalaires (chaînes, nombres, booléens), les séquences (listes) et les mappings (paires clé-valeur). Il est largement utilisé dans les fichiers de configuration, l'automatisation des infrastructures et l'échange de données, notamment dans des outils comme Kubernetes, Docker et Ansible.

En outre, YAML est un surensemble de JSON, ce qui signifie que les fichiers JSON valides peuvent être analysés en YAML. Les fichiers YAML portent généralement une extension .yaml ou .yml.

Vous pouvez également en savoir plus sur YAML sur son site web !

Syntaxe et structure YAML

Cette section explore les principes fondamentaux de la syntaxe YAML, notamment les paires clé-valeur, les listes, les données imbriquées et les commentaires.

Règles syntaxiques de base

Il existe quelques règles syntaxiques de base pour YAML : 

  • L'espacement indique la structure, évitez donc les tabulations ! 
  • Les paires clé-valeur suivent une structure key: value, semblable à celle d'autres langages. 
  • L'utilisation de traits d'union au début des lignes indique une liste. 
  • L'utilisation de # créera des lignes de commentaires.
# Here is an example of YAML
name: John Doe
age: 30
skills:
  - Python
  - YAML

Paires clé-valeur

YAML représente les données sous forme de paires clé-valeur, à l'instar des dictionnaires de Python. Il s'agit souvent d'informations données à différents fichiers de configuration et paramètres. Il n'est pas nécessaire de mettre les chaînes ou les clés entre guillemets ; il suffit d'écrire la clé et les valeurs nécessaires :

location: New York
country: USA
security-level: user

Listes en YAML

Les listes sont représentées par des traits d'union (-). Cela vous permettra de répertorier plusieurs objets sous une seule clé. Ces éléments sont souvent représentés visuellement par des puces lorsqu'ils sont lus par des éditeurs de balises.

fruits:
  - Apple
  - Banana
  - Cherry

Données imbriquées

Les structures imbriquées permettent une représentation hiérarchique des données à l'aide de l'indentation. Considérez-les comme des dictionnaires imbriqués. En utilisant l'indentation, vous indiquez quelles touches sont des sous-ensembles d'autres touches.

person:
  name: Alice
  details:
    age: 25
    city: London

Commentaires

Les commentaires commencent par # et sont ignorés par les analyseurs YAML. Ces commentaires sont des commentaires d'une seule ligne.

# This is a comment
username: admin
password: secret

Fonctionnalités avancées de YAML

YAML comprend des fonctionnalités puissantes telles que les chaînes multilignes, les types de données et les ancres, qui rendent les documents plus efficaces et plus structurés. Dans cette section, nous allons explorer ces possibilités à l'aide d'exemples pratiques.

Chaînes multilignes

YAML prend en charge les chaînes de caractères multilignes en utilisant | (bloc littéral) ou > (bloc plié). 

  • | Le bloc littéral créera une nouvelle ligne \n pour chaque saut de ligne. 
  • > Le bloc plié ne créera une nouvelle ligne que pour les sauts de ligne consécutifs.
literal: |
  This is a
  multi-line string.

folded: >
  This is another
  multi-line string.

Pour mieux comprendre ce qui précède, il suffit de montrer le résultat.

  • Pour le | (bloc littéral) :
This is a
multi-line string.
  • Pour le > (bloc plié) :
This is another multi-line string.

Types de données dans YAML

YAML prend en charge différents types de données, notamment les chaînes de caractères, les nombres, les booléens et les valeurs nulles. Il détecte automatiquement les types sur la base du formatage, mais permet également la définition explicite de types.

L'exemple suivant montre l'utilisation des types de données de base dans YAML :

string_implicit: Hello, YAML!  # No quotes needed unless necessary
string_double_quoted: "Supports escape sequences like \n and \t"
string_single_quoted: 'Raw text, no escape sequences'

integer: 42  # Whole numbers
float: 3.14  # Numbers with decimals

boolean_true: true
boolean_false: false

null_value: null  # Null value
null_tilde: ~  # Another way to represent null

YAML permet de déclarer explicitement des types à l'aide de !!type lorsque cela est nécessaire :

explicit_string: !!str 123  # Forces 123 to be a string
explicit_integer: !!int "42"  # Forces "42" to be an integer
explicit_float: !!float "3.14"  # Forces "3.14" to be a float

Comme YAML est souvent utilisé pour les données structurées, il prend en charge :

  • Listes (séquences) :
fruits:
  - Apple
  - Banana
  - Cherry
  • Dictionnaires (mappings) :
person:
  name: Alice
  age: 30
  is_student: false

Ancres et alias

YAML vous permet de définir des valeurs réutilisables à l'aide d'ancres (&) et d'y faire référence ultérieurement à l'aide d'alias (*). Cela permet de réduire la redondance dans les fichiers de configuration, ce qui les rend plus propres et plus faciles à maintenir.

defaults: &default_settings
  retries: 3
  timeout: 30

server1:
  host: example.com
  retries: *default_settings  # Reuses the retries value from defaults

La syntaxe <<: permet de fusionner les paires clé-valeur d'une ancre dans une autre cartographie. Si une clé existe dans les deux, la nouvelle valeur remplace l'originale.

defaults: &default_settings
  retries: 3
  timeout: 30

server1:
  <<: *default_settings  # Merges all key-value pairs from default_settings
  host: example.com  # This key is added to the merged data

Il s'agit de la structure finale résolue :

server1:
  retries: 3
  timeout: 30
  host: example.com

Les ancres et les alias sont particulièrement utiles dans les fichiers de configuration volumineux où la répétition manuelle des valeurs serait inefficace. Ils permettent de conserver les fichiers YAML DRY (Don't Repeat Yourself) et facilitent les mises à jour.

Cas d'utilisation courants pour YAML

YAML est largement utilisé dans le développement de logiciels, l'automatisation des infrastructures et la gestion des API. Sa syntaxe lisible par l'homme en fait un format privilégié pour les fichiers de configuration, la sérialisation des données et l'infrastructure en tant que code (IaC). Examinons ses applications les plus courantes.

Fichiers de configuration

YAML est largement utilisé pour la configuration dans des applicationstelles que Docker Compose, Kubernetes et les pipelines CI/CD. Sa facilité de compréhension permet à n'importe qui de prendre en main les fichiers de configuration YAML de Docker et de comprendre ce qui se passe.

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
    environment:
      - NGINX_HOST=localhost
      - NGINX_PORT=80

La lisibilité de YAML et la prise en charge des ancres et des alias permettent de réduire les répétitions, ce qui le rend plus facile à maintenir que JSON ou XML.

Apprenez-en plus sur YAML et son utilisation dans Docker dans ce cours intermédiaire sur Docker.

Sérialisation et transfert de données

YAML est utilisé pour sérialiser les données pour les API et les outils de gestion de la configuration en convertissant des structures de données complexes dans un format lisible par l'homme et facilement analysable par les machines. 

Par exemple, un corps de demande d'API formaté en YAML :

user:
  id: 123
  name: "John Doe"
  email: "johndoe@example.com"
  active: true

La structure de YAML, basée sur l'indentation, élimine la syntaxe inutile, ce qui le rend léger, lisible et facile à modifier par rapport à JSON.

Infrastructure as Code (IaC)

Les outils de gestion de la configuration comme Ansible et Kubernetes s'appuient sur YAML pour définir les états du système, automatiser les processus et assurer la cohérence entre les environnements.

  • Dans Ansible, YAML est utilisé pour écrire des playbooks qui définissent les états du système, les tâches et les dépendances, en veillant à ce que les composants de l'infrastructure soient configurés de manière cohérente. 
  • Kubernetes utilise des manifestes YAML pour définir des ressources telles que des pods, des services et des déploiements, permettant l'orchestration automatisée d'applications conteneurisées.

Voici un exemple de configuration d'un pod Kubernetes :

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app-container
      image: my-app:latest
      ports:
        - containerPort: 8080

Découvrez comment YAML est utilisé dans Kubernetesdans ce cours d'introduction à Kubernetes .

Documentation de l'API

Les spécifications d'API telles que OpenAPI et Swagger utilisent YAML pour définir les points de terminaison et les structures de données d'une manière facile à lire. YAML est utilisé pour décrire les méthodes de l'API, les paramètres de demande, les formats de réponse et les méthodes d'authentification.

Voici un exemple de spécification OpenAPI en YAML :

openapi: 3.0.0
info:
  title: User API
  version: "1.0"
paths:
  /users:
    get:
      summary: Retrieve a list of users
      responses:
        "200":
          description: Successful response

Les spécifications OpenAPI, par exemple, utilisent YAML pour documenter les API RESTful. Cela leur permet de fournir un plan clair pour générer des SDK clients, une documentation interactive sur les API et des tests automatisés. Ce format structuré garantit la cohérence entre les implémentations de l'API.

Travailler avec des fichiers YAML

YAML est largement utilisé pour les fichiers de configuration, l'automatisation et la sérialisation des données, mais comme il repose sur l'indentation, un formatage correct est crucial. Voici comment vous pouvez lire, écrire, valider et modifier YAML de manière efficace.

Lire et écrire YAML en Python

La bibliothèque PyYAML de Python peut analyser et générer du YAML.

Imaginez que vous ayez le fichier de configuration YAML suivant :

database:
  host: localhost
  port: 5432
  user: admin
  password: secret

Voici comment vous pouvez travailler avec votre fichier de configuration en Python :

import yaml

# Load YAML data
with open("config.yaml", "r") as file:
    data = yaml.safe_load(file)  # safe_load prevents arbitrary code execution

# Modify data (optional)
data["database"]["user"] = "new_user"

# Write YAML data
with open("output.yaml", "w") as file:
    yaml.dump(data, file, default_flow_style=False)

Si vous souhaitez travailler avec des données JSON en Python, consultez le tutorielcomplet sur Python JSON.

Validation des fichiers YAML

Pour vous assurer que la structure est correcte, vous pouvez utiliser des outils pour vérifier si des tabulations remplacent les espaces ou si des problèmes étranges se posent, tels que des caractères répétés, des problèmes de syntaxe et des espaces à la fin du texte.

Voici quelques validateurs YAML populaires :

Modifier YAML

Vous pouvez écrire et éditer YAML dans n'importe quel éditeur de texte, mais les outils de recherche de points et de coloration syntaxique améliorent la lisibilité.

Certains de mes éditeurs préférés :

  • VS Code (avec les plugins YAML)
  • PyCharm (support intégré)
  • Sublime Text (avec mise en évidence de la syntaxe YAML)

Erreurs courantes à éviter dans YAML

Malgré sa simplicité, vous pouvez facilement rencontrer des problèmes et des fautes de frappe lorsque vous travaillez avec YAML. Cette section traite de ces erreurs et fournit les meilleures pratiques pour écrire des fichiers propres et corrects. C'est aussi la raison pour laquelle je recommande l'utilisation d'un linter ou d'un éditeur de texte !

Mélange de tabulations et d'espaces

YAML s'appuie sur les espaces pour l'indentation - ne mélangez jamais les espaces et les tabulations. Les tabulations casseront tout simplement votre script YAML. Il s'agit en fait d'une décision consciencieuse, car les systèmes lisent les tabulations différemment et, pour minimiser l'impact, il est préférable d'utiliser des espaces.

Indentation incorrecte

Veillez à ce que l'indentation soit cohérente afin d'éviter les erreurs d'analyse. Les indentations étant la seule méthode utilisée par YAML pour indiquer la hiérarchie, une analyse incorrecte peut entraîner des problèmes dans votre code. Vous pouvez facilement ranger une paire de key: value au mauvais endroit, alors gardez l'œil ouvert pour repérer ces indentations !

Oubli des guillemets pour les caractères spéciaux

Utilisez des guillemets pour les chaînes contenant des caractères spéciaux ou des espaces. Des éléments tels que les barres obliques inversées, les virgules, les points d'exclamation, etc. ont besoin de guillemets pour être lus comme des chaînes de caractères.

path: "/home/user/documents"
message: "Hello, World!"

En utilisant une validation appropriée, une édition structurée et PyYAML de Python, vous pouvez travailler efficacement avec des fichiers YAML tout en évitant les pièges les plus courants.

Conclusion

YAML est un format puissant et simple, largement utilisé pour la configuration, la sérialisation des données et l'automatisation des infrastructures. Vous pouvez travailler efficacement avec YAML dans diverses applications en comprenant sa syntaxe, sa structure et ses meilleures pratiques.

Si vous êtes intéressé par l'application de YAML dans des scénarios réels :

Devenez ingénieur en données

Développez vos compétences en Python pour devenir un ingénieur de données professionnel.
Commencez gratuitement

FAQ

YAML est-il universel ?

Tant que la source de données ou la cible peut lire YAML, il s'agit d'une méthode viable et utile de sérialisation et de transport des données. Assurez-vous que vous envoyez des données à une cible qui peut traiter YAML.

YAML est-il sûr ? Les fichiers YAML peuvent-ils présenter des risques pour la sécurité ?

YAML n'est en soi qu'un format de données, mais des risques de sécurité apparaissent lors de l'analyse de fichiers YAML non fiables. PyYAML La méthode par défaut yaml.load() de Python peut exécuter du code arbitraire intégré dans YAML, ce qui la rend risquée. Au lieu de cela, utilisez toujours yaml.safe_load() pour empêcher l'exécution involontaire de codes malveillants. De même, lorsque vous utilisez YAML dans des applications, veillez à une validation stricte du schéma afin d'éviter les failles de sécurité.

YAML peut-il prendre en charge les variables d'environnement ?

Oui ! Bien que YAML lui-même ne traite pas directement les variables d'environnement, de nombreux outils (comme Docker Compose et Kubernetes) permettent de référencer les variables d'environnement dans les fichiers YAML.

Comment gérez-vous les commentaires dans YAML ?

YAML prend en charge les commentaires sur une seule ligne à l'aide du symbole #, mais ne prend pas en charge les commentaires sur plusieurs lignes. Si vous avez besoin de commentaires sur plusieurs lignes, une solution de contournement courante consiste à utiliser une touche fictive telle que _comment. Cependant, il s'agit simplement d'une convention qui ne sera pas ignorée par les analyseurs YAML, à moins que votre application ne la filtre spécifiquement.


Tim Lu's photo
Author
Tim Lu
LinkedIn

Je suis un data scientist avec de l'expérience dans l'analyse spatiale, l'apprentissage automatique et les pipelines de données. J'ai travaillé avec GCP, Hadoop, Hive, Snowflake, Airflow et d'autres processus d'ingénierie et de science des données.

Sujets

Apprenez-en plus sur l'ingénierie des données avec ces cours !

cursus

Ingénieur de données

40 heures hr
Acquérir des compétences très demandées pour ingérer, nettoyer et gérer efficacement les données, ainsi que pour planifier et surveiller les pipelines, vous permettra de vous démarquer dans le domaine de l'ingénierie des données.
Afficher les détailsRight Arrow
Commencer le cours
Certification disponible

cours

CI/CD pour l'apprentissage automatique

5 hr
4.2K
Améliorez votre développement de Machine Learning avec CI/CD en utilisant GitHub Actions et Data Version Control
Voir plusRight Arrow