YAML – 不可失误模式

YAML – 不可失误模式

在开发中,我们绝不能忽略配置管理的重要性。一种流行的声明式语言,YAML(Yet Another Markup Language),可以被用来读取和编写用户友好和可读的配置文件。例如,Ansible、Kubernetes和Docker Compose等工具,均使用YAML格式来管理配置。但是,我们是否有必要花费很多时间去学习它呢?本文将会为您带来一个解决方案,即YAML中的“不可失误模式”。

什么是YAML?

YAML 是 JSON、XML 等文件格式之外的一种具有易读性的数据序列化语言。 其基本思想是希望能够创造出一种易于人类阅读并且同时又适用于计算机读取的数据格式。YAML文件的主要用途是在应用程序和系统中的设置配置和数据传递,包括大多数流行的编程语言。

作为一个开发者,你将会遇到各种各样的YAML文件。下面是一个简单的例子:

pets:
  - name: garfield
    type: cat
    age: 7
  - name: odie
    type: dog
    age: 3

这段简单的YAML数据描述了两个宠物的名称、类型和年龄。通过它,你可以很容易地得到这些宠物的基本信息。

然而,YAML数据并不总是那么简单的,它可以包含许多结构信息,例如:数组、嵌套数据、Maps等。

YAML的错误

在编写YAML的时候,最常见的错误包括标识符的缩进、大小写格式、AppArmor配置文件的注释、文件引用等等。由于YAML是一种空格缩进格式的语言,所以在代码中,缩进是最常被遗漏或者不正确使用的,经常会导致语法错误。下面是一个缩进错误的YAML代码示例:

#缩进错误示例
pets:
-name: garfield
-type: cat
-age: 7
-name: odie
-type: dog
-age: 3

在这个例子中,你可以看到 name 下一行的缩进量不一致。即使只有一个字符的不同,它也会导致YAML语法错误。

保持YAML源代码规范

我们经常遇到这样一个问题:为什么YAML的源码这么凌乱,这么难看?这是因为缩进、换行和冒号以及值之间的空格的数量和格式都非常重要。因此,不遵守YAML规则将导致YAML文件不可读。为了规范YAML源代码的格式,我们可以使用“严格模式”。

  • 在首行声明严格模式
--- !!stric

在这个例子中,我们用 --- !!stric 来表示所写YAML代码要严格,这将清晰地表明我们想使用严格模式对其进行处理。这个 “strict” 在YAML中是一个名为Tag的特殊值。

  • 紧凑模式

创建一个键/值对时,正常设置方法是在冒号后面添加一个空格,键名和值之间也需要一个空格,如下所示:

hostname: localhost

但如果之间没有添加空格,这样的错误将被认为是YAML的一种特殊语法,即“紧凑模式”:

hostname:localhost

这个紧凑模式可以使YAML看起来更短,但是如果代码不仔细检查,这可能会产生错误。

避免YAML错误

为了避免错误,我建议在存储YAML文件之前使用“YAML Validator”来验证你的代码。这在某些编辑器中是自带的,也有独立的YAML解析器/验证器(如yamllint)。使用验证器不仅可以指出你的代码中的错误,而且可以帮助规范化代码,并使它更加可读。

另一个推荐的解决方案是使用严格模式来让程序自动报告错误。具体方法是在文件的开头添加标记,如下所示:

--- !!stric

这种方法遵循了YAML规范,因此可以自动扫描您的代码,发现潜在的问题并且立即报告。当你尝试使用不规范的规则时,这种方法也可以在编写代码的时候提醒您发现错误。

要使用YAML的严格模式,需要支持这种语法的解析器。幸运的是,许多编程语言和框架(如node.js)都支持YAML的解析和格式化,所以你可以使用相应的YAML库或开发工具来帮助你规范你的代码和自动检测错误。

引入其他文件和资源

在YAML中,还有引入其他文件和资源的方法。

#extend.yaml
dockerfileExtends: &dockerfileExtends
  RUN apt-get update; \
      apt-get install -y --no-install-recommends vim curl; \
      curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | python3

# main.yaml
extends:
  file: ../docker-compose/extend.yml
  service: builder

services:
  builder:
    image: my-image:latest
    build:
      context: .
      dockerfile: builder-dockerfile
      args:
        - dns=8.8.8.8
      <<: *dockerfileExtends

在这里,我们将一个文件(extends.yml)扩展给另一个文件(main.yml),并使用此文件中的键作为目标应用程序的构建块。

YAML – 不可失误模式的结论

虽然遵循最佳实践一直是我们建议的,但有时我们可能会失误并忘记正确书写配置。为了避免这种情况的发生,我们可以使用一个特殊的YAML模式,即“不可失误模式”。

在“不可失误模式”下,我们更加谨慎地对待YAML的语法。具体而言,我们需要了解YAML的核心结构,特别是关于缩进、注释、标记、列表、键/值等的规则。

如果您还没有使用过YAML它可能会需要一些时间来习惯它的语法。但是,一旦您熟悉了YAML,它会变得非常方便和易于使用,可以使您的代码更加清晰和易读。

从这里开始,你可以着手使用YAML,使用以上介绍的方法和规则,来保持YAML源代码的规范,降低错误的发生率,加快开发进程。

推荐阅读

结论

YAML是一种流行的声明式语言,它被广泛用于读取和编写用户友好和可读的配置文件。然而,由于缩进、大小写和冒号等标点符号的使用需要遵循一定的规则,所以在编写YAML时,易犯错误,导致语法错误。为了规范YAML源代码的格式,提高开发效率,我们可以使用“不可失误模式”。同时,使用YAML验证器进行验证和使用严格模式进行自动检测错误是非常推荐的做法。掌握这些方法和规则,可以让您在开发中更加轻松地处理YAML文件。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程