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.
{
"server": {
"host": "localhost",
"port": 8080,
"debug": true
},
"database": {
"url": "postgres://localhost/mydb",
"pool": 10
}
}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
| Format | Lisibilité | Commentaires | Tableaux | Idéal pour |
|---|---|---|---|---|
| JSON | ★★★☆☆ | Pas de commentaires | Natif | API, échange de données |
| YAML | ★★★★★ | Oui (#) | Natif | Fichiers de config, IaC |
| TOML | ★★★★☆ | Oui (#) | Natif | Config d'app (Rust, Python) |
| XML | ★★☆☆☆ | Oui (<!-- -->) | Éléments répétés | Documents, SOAP, SVG |
Pièges courants de YAML
YAML est puissant mais comporte des cas limites bien connus qui surprennent les développeurs :
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.
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.
Les valeurs ressemblant à des nombres, booléens ou null sont automatiquement converties. Utilisez des guillemets pour les valeurs à conserver sous forme de chaînes.
La spécification YAML interdit explicitement les tabulations pour l'indentation. Configurez votre éditeur pour utiliser des espaces dans les fichiers YAML.
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).
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
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.
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.
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.
La migration d'un outil à un autre implique souvent de convertir son format de configuration.
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.
Les outils internes peuvent consommer des configurations YAML tandis que les API externes nécessitent du JSON.
Questions fréquentes
Oui. YAML 1.2 est un sur-ensemble strict de JSON — tout document JSON valide est également du YAML valide.
YAML prend en charge les commentaires, ce que JSON ne fait pas. YAML est également plus compact pour les structures profondément imbriquées.
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).
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.
JSON.stringify convertit les valeurs undefined en null dans les tableaux et les omet des objets.
Oui. Comme YAML est un sur-ensemble de JSON, vous pouvez intégrer la syntaxe JSON directement dans un document YAML.