YAML:人類易讀的資料序列化格式

YAML的發展歷史

YAML(YAML Ain’t Markup Language)是一種人類易讀的資料序列化格式,最初於2001年由Clark Evans、Ingy döt Net和Oren Ben-Kiki共同開發。YAML的名稱原本是「Yet Another Markup Language」,但後來改為「YAML Ain’t Markup Language」,強調它並非標記語言,而是資料序列化格式。

YAML的設計初衷是創造一種易於人類閱讀且能表達常見資料結構的格式,同時保持對程式語言的相容性。開發者們希望創造一種比XML更簡潔、比JSON更易讀的格式。

YAML的發展里程碑:

  • 2001年:YAML 0.1版本發布
  • 2004年:YAML 1.0規格確立
  • 2009年:YAML 1.2版本發布,解決了與JSON相容性的問題
  • 2021年:YAML 1.2.2版本發布,修正了一些語法問題並改進了規格

YAML的現代應用與使用狀況

現在,YAML已成為軟體開發和系統配置的重要工具,廣泛應用於:

  1. 容器化技術與雲端服務

    • Docker Compose檔案
    • Kubernetes配置檔案
    • AWS CloudFormation、Azure Resource Manager等雲服務配置
  2. CI/CD與自動化

    • GitHub Actions工作流程
    • GitLab CI/CD配置
    • Jenkins配置
  3. 配置管理

    • Ansible劇本
    • Puppet和Chef配置
    • Spring Boot應用程式配置
  4. 靜態網站生成器

    • Jekyll、Hugo的前置資料
    • 部落格和文件網站的元數據
  5. 開發工具配置

    • 程式編輯器設定(如VSCode)
    • 程式碼檢查工具(如ESLint)

YAML被廣泛採用的原因包括其人類可讀性、支援複雜資料結構、易於整合,以及各種程式語言的廣泛支援。

YAML基礎教學

基本語法

1. 縮排與結構

YAML使用縮排(通常是2個空格)來表示資料階層:

person:
  name: 張小明
  age: 30
  skills:
    - Python
    - YAML
    - Docker

2. 基本資料型別

字串

name: 張小明                 # 普通字串
description: '含有特殊字元: &' # 引號字串
long_text: |                # 保留換行的多行文字
  這是第一行
  這是第二行
folded_text: >              # 摺疊成單行的多行文字
  這些文字會被
  摺疊成一行

數字

age: 30            # 整數
price: 19.99       # 浮點數
scientific: 1.2e+3 # 科學記號

布林值

is_active: true
has_license: false

空值

middle_name: null  # 或者直接用 ~

3. 集合型別

清單(Lists)

fruits:
  - 蘋果
  - 香蕉
  - 橘子

# 或者使用行內語法
colors: [紅, 綠, 藍]

物件/映射(Maps)

person:
  name: 張小明
  age: 30

# 或者使用行內語法
person: {name: 張小明, age: 30}

4. 錨點與別名(重複使用資料)

defaults: &defaults
  timeout: 30
  retry: 3

development:
  <<: *defaults   # 插入defaults的所有欄位
  host: dev.example.com

production:
  <<: *defaults
  host: prod.example.com
  timeout: 60     # 覆蓋預設值

實際應用範例

Docker Compose配置

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: myapp
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

簡單的個人配置檔

person:
  name: 張小明
  contact:
    email: ming@example.com
    phone: "0912-345-678"
  education:
    - institution: 台灣大學
      degree: 資訊工程學士
      year: 2015
    - institution: 交通大學
      degree: 資訊科學碩士
      year: 2018
  interests:
    - 程式設計
    - 攝影
    - 旅行
  is_active: true

使用YAML的提示

  1. 注意縮排 – 使用空格(通常是2個)而非tab鍵
  2. 小心字串中的特殊字元,必要時使用引號
  3. 注意布林值的寫法:true、false、yes、no、on、off
  4. 使用驗證工具檢查YAML的有效性
  5. 避免過度巢狀化,以保持可讀性

透過本篇介紹,希望能幫助你理解YAML的基本概念和用法。隨著容器化、配置即代碼等趨勢,YAML在現代軟體開發中的重要性只會越來越高。掌握YAML不僅有助於配置各種系統,也是現代開發者的必備技能之一。

在〈YAML:人類易讀的資料序列化格式〉中有 1 則留言

發表迴響