前言
这里只是简单介绍ymal语言
YAML 简介
YAML(YAML Ain’t Markup Language)是一种人性化的数据序列化格式,专为配置文件和数据结构交换而设计。其核心目标是:
- 易于人类阅读和编写
- 表达能力强
- 支持跨语言数据交换
- 与编程语言原生数据结构兼容
YAML 文件扩展名通常为 .yaml 或 .yml,广泛应用于 Docker Compose、Kubernetes、Ansible、CI/CD 配置等领域。
核心特性
- 简洁性:使用缩进表示层级,避免了大括号等符号
- 可读性:类似自然语言的表达方式
- 扩展性:支持复杂数据类型和引用
- 语言无关:几乎所有编程语言都有解析库
- 兼容性:可包含 JSON 文档
基本语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| key: value
name: John Doe
description: | This is a multi-line string that preserves line breaks
summary: > This will be folded into a single paragraph
|
重要规则:
- 使用 空格缩进(禁止使用制表符 Tab)
- 缩进表示层级关系
- 大小写敏感
- 文档开头可用
---,结尾可用 ...(可选)
数据结构
1. 标量(Scalars)
基本数据类型:
1 2 3 4 5 6
| string: "Hello World" integer: 42 float: 3.14 boolean: true null_value: null date: 2023-10-05
|
2. 序列(Sequences/列表)
1 2 3 4 5 6 7 8
| fruits: - Apple - Banana - Orange
colors: [red, green, blue]
|
3. 映射(Mappings/字典)
1 2 3 4 5 6 7 8
| person: name: Alice age: 30 is_student: false
coordinates: { x: 12.5, y: -7.2 }
|
4. 复合结构
1 2 3 4 5 6 7 8 9
| employees: - id: 001 name: Bob skills: - Python - Docker - id: 002 name: Carol skills: [Java, Kubernetes]
|
高级特性
1. 多文档支持
1 2 3 4 5 6 7
| ---
name: Document 1 ... ---
name: Document 2
|
2. 锚点与别名(避免重复)
1 2 3 4 5 6 7 8 9 10 11
| defaults: &base_config api_version: v1 timeout: 30s
development: <<: *base_config debug: true
production: <<: *base_config debug: false
|
3. 类型转换
1 2 3
| string_int: !!str 42 float_number: !!float "3.14"
|
4. 复杂键
使用场景
- 配置文件:应用配置(如 Docker Compose, Kubernetes YAML)
- 基础设施即代码:Ansible Playbooks, Terraform
- API规范:OpenAPI/Swagger
- 数据序列化:替代 XML/JSON 用于数据传输
- 测试数据:结构化测试用例
- 持续集成:GitHub Actions, GitLab CI
注意事项
- 缩进敏感:必须使用空格(建议2或4空格)
- 避免Tab:YAML 规范禁止使用制表符
- 引号使用:
- 包含特殊字符时需加引号:
key: "value: with colon"
- 单引号不转义,双引号支持转义
- 键唯一性:同一层级键名必须唯一
- 安全限制:解析外部 YAML 时注意安全风险(如 YAML 炸弹)
总结
YAML 核心优势
✅ 人类友好:相比 JSON/XML 更易读写
✅ 表达力强:支持复杂结构和引用
✅ 广泛支持:几乎所有编程语言都有解析库
✅ 配置首选:现代 DevOps 工具链的标准配置格式
使用建议
- 使用 2 或 4 空格 缩进(禁用 Tab)
- 简单值 省略引号,特殊字符值使用引号
- 大型配置使用 锚点/别名 减少重复
- 验证 YAML 文件:
1 2
| python -c 'import yaml; yaml.safe_load(open("file.yaml"))'
|
- 搭配 Schema 验证(如 JSON Schema)确保结构正确
典型工作流
1 2 3 4
| graph LR A[编写YAML] --> B[版本控制] B --> C[CI/CD解析] C --> D[部署执行]
|
版权声明: 此文章版权归曦曦所有,如有转载,请注明来自原作者