YAML (YAML Ain't Markup Language) est un langage de sérialisation de données convivial et inter-langues, couramment utilisé pour les fichiers de configuration et représentant les données sous forme de mappages, de séquences et de scalaires. La version 1.2 a fait de YAML un sur-ensemble strict de JSON. Dans le travail de proxy et de scraping, YAML apparaît dans les fichiers de configuration. Par exemple, la configuration statique du proxy Envoy est écrite en YAML et définit les écouteurs et les clusters par lesquels le trafic circule.
Bases de la syntaxe YAML
- Mappages :
key: valuepaires, comme des dictionnaires ou des hachages. - Séquences : Listes, chaque élément étant sur sa propre ligne commençant par
-. - Indentation : En style bloc, l'indentation détermine la structure, donc un espace mal placé change ce que signifie les données.
- Pas de tabulations : Les caractères de tabulation ne doivent pas être utilisés pour l'indentation.
- Commentaires : Un
#commence un commentaire.
Utiliser YAML en toute sécurité dans les configurations de scraper et de proxy
Les analyseurs YAML peuvent faire plus que lire des données simples. La documentation de PyYAML avertit que l'appel de yaml.load sur des données provenant d'une source non fiable n'est pas sûr, car cela peut construire des objets Python arbitraires. Sa fonction yaml.safe_load ne reconnaît que les balises YAML standard, ce qui en fait le choix documenté pour les entrées non fiables.
Chaînes multi-lignes, ancres et documents multiples
- Bloc littéral (
|): Conserve chaque saut de ligne dans une chaîne multi-ligne. - Bloc replié (
>): Transforme chaque saut de ligne en un espace, sauf avant des lignes vides ou plus indentées. - Ancres et alias :
&namemarque un nœud, et*namele réutilise plus tard au lieu de le répéter. - Documents multiples :
---marque le début du contenu d'un document, de sorte qu'un flux peut contenir plusieurs documents....termine un document sans en commencer un nouveau.