YAML

1 tools

Formats de sérialisation de données

La sérialisation de données est le processus de conversion de données structurées en un format pouvant être stocké ou transmis et reconstruit ultérieurement.

JSON, YAML, TOML et XML sont les quatre formats de sérialisation textuels dominants dans le développement logiciel.

JSON et YAML côte à côte

JSON et YAML représentent le même modèle de données. YAML est un sur-ensemble strict de JSON — tout document JSON valide est également du YAML valide.

JSON
{
  "server": {
    "host": "localhost",
    "port": 8080,
    "debug": true
  },
  "database": {
    "url": "postgres://localhost/mydb",
    "pool": 10
  }
}
YAML
server:
  host: localhost
  port: 8080
  debug: true
database:
  url: postgres://localhost/mydb
  pool: 10

YAML utilise l'indentation plutôt que les accolades et crochets, et omet les guillemets pour la plupart des valeurs de chaîne.

Comparaison des formats

FormatLisibilitéCommentairesTableauxIdéal pour
JSON★★★☆☆Pas de commentairesNatifAPI, échange de données
YAML★★★★★Oui (#)NatifFichiers de config, IaC
TOML★★★★☆Oui (#)NatifConfig d'app (Rust, Python)
XML★★☆☆☆Oui (<!-- -->)Éléments répétésDocuments, SOAP, SVG

Pièges courants de YAML

YAML est puissant mais comporte des cas limites bien connus qui surprennent les développeurs :

Le problème de la Norvège

La valeur brute 'NO' est interprétée comme le booléen false en YAML 1.1. Les codes pays comme NO (Norvège), OFF, FALSE, N sont tous analysés comme false. Mettez toujours les chaînes ambiguës entre guillemets.

Sensibilité à l'indentation

YAML utilise l'indentation pour définir la structure. Un espace en trop ou une tabulation peut complètement changer la signification d'un document. Les tabulations sont interdites en YAML — uniquement des espaces.

Coercition de type implicite

Les valeurs ressemblant à des nombres, booléens ou null sont automatiquement converties. Utilisez des guillemets pour les valeurs à conserver sous forme de chaînes.

Les tabulations sont interdites

La spécification YAML interdit explicitement les tabulations pour l'indentation. Configurez votre éditeur pour utiliser des espaces dans les fichiers YAML.

Modes de chaînes multilignes

YAML dispose de deux indicateurs de chaînes multilignes : | (bloc littéral, préserve les sauts de ligne) et > (bloc replié, convertit les sauts de ligne en espaces).

Boucles d'ancre/alias

Les ancres (&) et alias (*) YAML permettent la réutilisation de nœuds, mais peuvent créer des références circulaires.

Fonctionnalités uniques de YAML

Commentaires

YAML prend en charge les commentaires avec le caractère #. C'est l'un des plus grands avantages pratiques sur JSON pour les fichiers de configuration.

Ancres et alias

YAML permet de définir un nœud une fois avec &nom-ancre et de le réutiliser partout avec *nom-ancre.

Chaînes multilignes

YAML prend en charge les scalaires de bloc avec deux modes : le bloc littéral (|) préserve les sauts de ligne ; le bloc replié (>) les convertit en espaces.

Quand convertir

Configuration de pipeline CI/CD

GitHub Actions, GitLab CI et CircleCI utilisent YAML nativement. Lors de la génération de configurations de pipeline par programmation, il est souvent plus facile de construire un objet JSON et de le convertir en YAML.

Manifestes Kubernetes

Les ressources Kubernetes sont définies en YAML, mais certains outils produisent du JSON. La conversion entre formats permet d'inspecter les réponses d'API.

Traitement des réponses d'API

Les API REST renvoient du JSON. Lors de l'alimentation de ces données dans des systèmes de configuration basés sur YAML, un convertisseur comble l'écart.

Migration de configuration

La migration d'un outil à un autre implique souvent de convertir son format de configuration.

Flux de validation de schéma

Les outils JSON Schema sont plus matures. Un schéma courant consiste à créer la configuration en YAML pour la lisibilité et à la convertir en JSON pour la validation.

Échange de données avec les API

Les outils internes peuvent consommer des configurations YAML tandis que les API externes nécessitent du JSON.

Questions fréquentes

YAML est-il un sur-ensemble de JSON ?

Oui. YAML 1.2 est un sur-ensemble strict de JSON — tout document JSON valide est également du YAML valide.

Pourquoi choisir YAML plutôt que JSON pour les fichiers de configuration ?

YAML prend en charge les commentaires, ce que JSON ne fait pas. YAML est également plus compact pour les structures profondément imbriquées.

Qu'est-ce que TOML et quand l'utiliser ?

TOML est conçu pour les fichiers de configuration avec une syntaxe claire de type INI et des types explicites. C'est le standard pour Rust (Cargo.toml) et Python (pyproject.toml).

La conversion de JSON vers YAML perd-elle des informations ?

Rarement. JSON préserve l'ordre des clés dans la plupart des analyseurs. YAML prend en charge les ancres et les balises sans équivalent JSON.

Qu'est-ce qui cause l'apparition de 'undefined' dans la sortie JSON ?

JSON.stringify convertit les valeurs undefined en null dans les tableaux et les omet des objets.

Puis-je utiliser JSON dans un fichier YAML ?

Oui. Comme YAML est un sur-ensemble de JSON, vous pouvez intégrer la syntaxe JSON directement dans un document YAML.