一分钟了解YAML,使用场景,和它的优缺点

什么是YAML?

YAML:全称“YAML Ain’t Markup Language”,递归缩写意为“YAML不是标记语言”。YAML由Clark Evans、Ingy döt Net和Oren Ben-Kiki于2001年共同提出,最初命名为“Yet Another Markup Language”(另一种标记语言),后来强调其数据描述属性而非文档标记功能。

2004年发布YAML 1.0标准,2010年推出1.2版本,并成为JSON的超集(兼容JSON语法并扩展功能)。YAML的设计目标是为人类提供更友好的数据序列化格式,尤其在配置文件和数据交换场景中替代XML和JSON的复杂性。

YAML格式长啥样?

以下是一个包含多种数据类型和结构的YAML格式示例,涵盖配置文件的各种常见场景,基本能充分展示YAML的核心特性:


# 应用配置示例
application:
  name: "MyApp"
  version: 1.2.3
  environment: &env production  # 定义锚点
  description: |
    这是一个多行字符串示例,
    保留换行格式,适合描述性文本。
  features:
    - auto_scaling: true
    - monitoring: enabled
    - backup_schedule: "0 2 * * *"  # 每天凌晨2点执行

database:
  <<: *env  # 引用锚点,继承production环境配置
  type: PostgreSQL
  connection:
    host: db.example.com
    port: 5432
    username: admin
    password: !secret db_password  # 密码通过外部安全方式注入
  pool_size: !!int 10  # 类型强制转换为整数

servers:
  - name: web_server
    ip: 192.168.1.10
    roles: [web, api]  # 列表简写形式
    os: Ubuntu 22.04 LTS
  - name: db_server
    ip: 192.168.1.20
    roles:
      - database
      - cache
    os: CentOS 7

logging:
  level: !!str debug  # 强制字符串类型
  file: /var/log/myapp.log
  rotation: 
    size: 100MB
    keep: 7 days

# 多文档分隔符示例
---
# 测试环境配置
test_env:
  name: "UnitTest"
  env: test
  features:
    - mock_api: true
    - debug_mode: true

YAML的格式特点

1 层级结构:

通过空格缩进(禁止制表符)表示层级,缩进长度灵活但需要对齐,相同层级缩进必须保持一致。(如下示例)

2 数据结构:

支持标量(字符串、数字、布尔值、日期、空值等)、列表(以-开头,如- name: "MyApp")、字典(键值对key: value,如size: 100MB)及嵌套组合。

3 语法特性:

  • 注释以#开头,支持单行和多行注释。(如# 强制字符串类型(注释文本内容)
  • 多行字符串使用|(保留换行)或>(折叠换行)表示。
  • 锚点</span>与别名*实现配置复用,如&defaults定义锚点,<<: *defaults引用配置。
  • 多文档分隔符---支持同一文件包含多个独立文档。

4 支持数据类型:

YAML格式兼容JSON基础数据类型,并扩展了部分复杂类型,如时间戳created_at:2023-04-01T12:00:00Z、集合等。YAML也支持类型强制(如!!str!!int)。

YAML的使用场景

  • 配置文件:应用配置(如Webpack、Vite)、容器编排(Docker Compose、Kubernetes YAML)、自动化工具(Ansible Playbooks、Terraform)。
  • CI/CD流水线(工作流):GitHub Actions、GitLab CI、Travis CI的流程定义。
  • 静态内容生成:Hexo、Hugo的内容文件,Markdown文档的元数据。
  • 数据交换:API通信(部分RESTful API支持YAML)、日志/缓存数据序列化、测试框架(Jest、Cypress)配置。
  • 基础设施即代码:云资源定义(AWS CloudFormation、Azure ARM模板)、配置管理。

YAML格式的优缺点分析

1 YAML有哪些优点:

  • 高可读性:接近自然语言的缩进和简洁语法,减少冗余符号(如JSON的引号、括号)。
  • 结构灵活:支持复杂嵌套数据结构,锚点/别名减少重复定义。
  • 跨语言兼容:语言无关,广泛库支持(Python的PyYAML、JavaScript的js-yaml、Java的SnakeYAML)。
  • 扩展性强:支持自定义标签、类型强制及多文档处理。
  • 注释支持:便于文档化配置项,提升可维护性。

2 YAML的相对缺点:

  • 缩进敏感:不规范的空格/制表符混用或缩进不一致易导致解析错误。
  • 解析复杂度:相比INI/JSON,YAML解析器需处理缩进、锚点、多文档等特性,大文件解析性能较低。
  • 版本兼容性:YAML 1.1与1.2在部分特性(如集合类型)存在差异,需注意兼容问题。
  • 错误信息模糊:解析错误时可能缺乏明确提示,调试难度较高。
  • 过度设计风险:锚点/别名或复杂嵌套可能增加理解成本,需平衡简洁性与可维护性。

--End--

👨我是WordBN字远笔记软件、C++应用服务器MYCP开源项目作者💻

📌关注我,每天花一分钟学一个编程知识📚

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容