YAML 初探
一 简介
YAML(读音:[ˈjæməl]),即:YAML Ain't a Markup Language 的递归缩写(这里插一句解释,递归缩写(Recursive acronym)即递归首字缩写,是一种在全称中递归引用它自己的缩写。)。官网:https://yaml.org/
由于其可读性高,故常用来表达数据序列化的格式。YAML 参考了其他多种语言,包括:C、Python、Perl,并从 XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans 在 2001 年首次发表了这种语言,另外 Ingy döt Net 与 Oren Ben-Kiki 也是这语言的共同设计者。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。
二 应用场景
在我的经历中,yaml 最常用的地方是 kubernetes 的配置文件,其次是工程代码中作为配置文件,用于配置一些变量,例如依赖的服务环境,数据库地址、端口,其他环境信息等等,用于替代或结合.properties 配置文件来使用。
在 K8S 中,yaml
配置文件就是 K8S 资源对象的说明书,定义了对象包含的元素及采取的动作,每种对象都可以通过 yaml 配置文件来创建。deployment,还有 service 都是通过 yaml 文件来做配置的。
三 YAML 数据格式
在阮一峰的文章: YAML 语言教程中,指出 YAML 支持的数据结构有三种:
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值。
json 中同样也会有对象和数组结构,这里我们做个简单的对比,通过下面的示例:
json 结构:
如果我们把上面的结构用 yaml 表示,那么会是下面的结构:
如果大家看过我之前容器系列的文章,那么应该能够了解大概的涵义,这个文件简单地定义了一个 Pod 对象,包含两个容器。
四 YAML 语法
既然定义为一种语言,那么就必然会有规范,也就是我们经常说的语法。YAML 的基本语法包括:
1、大小写敏感
2、使用缩进表示层级关系
3、禁止使用 tab 缩进,只能使用空格键
4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级
5、使用 #表示注释
6、字符串可以不用引号标注
除此之外,针对特殊字符的处理,会涉及单引号和多引号的处理:
单引号: 将字符串里面的特殊字符转义为字符串处理
双引号: 不会转义字符串里面的特殊字符,特殊字符作为本身想表示的意思。
null 或~表示空值; iso-8601 标准表示日期;使用感叹号!实现强制转换数据类型,单叹号通常是自定义类型,双叹号是内置类型。
五 语法检测工具
开发过程中,有时候为了验证 yaml 是否符合语法要求,会对文件进行语法检验。idea 内安装了 yaml 支持的插件;另外,也可以通过在线的语法校验工具来做检查,我常用的就是 BEJSON:https://www.bejson.com/validators/yaml_editor/
版权声明: 本文为 InfoQ 作者【程序员架构进阶】的原创文章。
原文链接:【http://xie.infoq.cn/article/18139c3c3c830268c1c6de757】。文章转载请联系作者。
评论