YAML(“YAML Ain't Markup Language”的缩写)是一种数据序列化格式,用于在不同系统和编程语言之间存储和交换数据。YAML 被设计为易于人类阅读,使其成为旨在供人们阅读的数据的不错选择。
在这里,我想了解一下 YAML 的基本特性以及它在 DevOps 工具中被广泛使用的原因。
什么是 YAML?在 YAML 发展之初,它是作为“Another Markup Language”的缩写而得名的。后来,创作者决定将其改为“YAML Ain't Markup Language”,以区别于真正的标记语言并避免混淆。
该语言类似于 XML 和 JSON,但在保持类似功能的同时使用更简约的语法。YAML 通常用于在基础架构即代码 (IAC) 程序中创建配置文件或在 DevOps 工作中管理容器。
在大多数情况下,YAML 用于创建可以执行 YAML 文件中编写的命令序列的自动化协议。这使您的系统更加独立和响应迅速,而无需额外的开发人员关注。
越来越多的公司正在使用 DevOps 和虚拟化,因此 YAML 是现代开发人员的必备工具。此外,YAML 易于集成,支持 Python(使用 PyYAML 库、Docker 或 Ansible)和其他流行技术。
现在让我们看看 YAML、JSON 和 XML 之间的主要区别是什么。
YAML 与 JSON 与 XML首先,我将列出YAML语言的一些基本特征,我认为这些特征可以将其与其他语言区分开来:
- 简约语法;
- 人类可读代码;
- 跨语言兼容性;
- 类似于 JSON 的内联样式(YAML 是它的超集)并且被认为比 JSON 更“干净”;
- 为处理数据而锐化;
- 支持评论;
- 支持不带引号的字符串。
作为附加功能,我提到了可扩展数据类型、相对锚点和保留键顺序的类型映射。
YAML 非常适合使用 DevOps 管道或虚拟机的数据密集型应用程序。此外,提高数据可读性对于开发人员经常与他们交互的团队是有益的。
例如,与 YAML 相比,XML可以通过以下方式进行描述:
- 比较啰嗦;
- 更难阅读;
- 作为标记语言,YAML 作为数据格式化语言;
- 比 YAML 更多的特性,比如标签属性;
- 更严格的文档架构。
通常,XML 非常适合需要对验证、架构和名称空间进行精细控制的复杂项目。该语言的可读性很差,需要更多的带宽和存储容量,但提供了前所未有的控制。
至于JSON,与 YAML 相比,它的特点是:
- 明确、严格的语法要求;
- 更难阅读;
- 类似 YAML 的内联样式(一些 YAML 解析器可以读取 JSON 文件);
- 还没有评论;
- 字符串需要双引号。
JSON 通常用于 Web 开发,它是通过 HTTP 连接序列化和传递数据的最佳格式。
在我们了解了上述三种语言之间的差异之后,我想指出许多开发人员喜欢的 YAML 的一些最显着的特性。
YAML 的显着特征多文档支持您可以将多个 YAML 文档合并为一个 YAML 文件,以便于文件组织和数据解析。
文档由三个破折号 (— -) 分隔:
---
player: playerOne
action: attack (miss)
---
player: playerTwo
action: attack (hit)
___
易于阅读的语法 YAML 文件的语法使用类似于 Python 的缩进系统。您必须使用空格而不是制表符,以避免混淆。这样可以去除 JSON 和 XML 中的额外字符(引号、方括号和大括号)。结果,文件的可读性大大提高:
#YAML
Imaro:
author: Aldous Huxley
language: English
publication-year: 1932
pages: 311
现在将其与 JSON 格式进行比较:
#JSON
{
"Imaro": {
"author": "Aldous Huxley",
"language": "English",
"publication-year": "1932",
"pages": 311
}
}
缺少可执行文件YAML 不包含可执行文件。因此,与第三方交换 YAML 文件是安全的。要使用可执行文件,YAML 需要与其他语言集成,例如 Perl 或 Java。
注释支持YAML 允许您在字符后添加注释#,就像在 Python 中一样:
key: #This is a single line comment
- value line 2
#This is
#a multiline comment
- value line 21
显式和隐式类型YAML 提供自动类型检测和显式指定数据类型的能力。要使用具体类型,!![typeName]请在值之前写入。
# This value has been converted to an int:
14.10 is-an-int: !!int
# Converts any value to a string:
67.43 is-a-str: !!str
# Must be a boolean value:
is-a-bool: !!yes bool
键值对YAML 使用键值对来表示数据,类似于 Python 中的字典。例如:
key1: value1
key2: value2
key3: value3
字符串“字符串”是可以包含单词或句子的字符集合。您可以将其|用于单行或>段落。YAML 中不需要引号。
str: Hello World
data: |
This
Separate
strings
data: >
This
one paragraph
text
字典YAML 支持字典,可以使用键值对表示。字典允许您将数据划分为逻辑类别。例如:
key1: value1
key2:
key3: value3
key4: value4
字典可以包含更复杂的结构,允许您存储复杂的关系数据。
序列序列是类似于列表或数组的数据结构,在同一键下存储多个值。它们使用缩进或定义[]。
animals:
- dog
- cat
- elephant
单行序列看起来更简洁但可读性较差:
animals: [dog, cat, elephant]
标量和映射标量是名称对应的单个值。YAML 支持标准类型:intand float、boolean、string和null。它们可以用不同的方式表示:十六进制、八进制或指数。还有用于数学实体的特殊类型,例如 infinity、-infinity 和 NAN。
integer: 25
hex: 0x12d4 #equal to 4820
octal: 023332 #equal to 9946
float: 25.0
exponent: 12.3015e 05 #equal to 1230150.0
boolean: Yes
string: "25"
infinity: .inf # converts to infinity
neginf: -.Inf #converts to minus infinity
not: .NAN #Not a Number
null: ~
YAML 除了上述的特性外,还有:
- 锚;
- 模板;
- 与Docker、Ansible等交互;
- 扩展序列和映射;
- 扩展数据类型(时间戳、空等)。
YAML 语法旨在简单易用,使其成为供人类阅读的数据的流行选择。通过使用缩进和键值对,YAML 能够表示范围广泛的数据类型。
YAML 的主要优点之一是它的可读性。YAML 旨在尽可能简洁,同时仍然易于理解。这使得它成为供人类读取的数据(例如配置文件)的不错选择。
YAML 的另一个好处是它与许多流行的 DevOps 工具集成,例如 Ansible、Docker 和 Kubernetes。这些工具使用 YAML 来定义配置文件,使其成为在这些领域工作的任何人的宝贵技能。
结论总之,YAML 是一种人类可读的数据序列化格式,用于在不同系统和编程语言之间存储和交换数据。它广泛用于 DevOps 工具,并因其简单性、可读性和灵活性而受到重视。
,