YAML là gì?

YAML là gì?

YAML là một ngôn ngữ tuần tự hóa dữ liệu cho phép bạn lưu trữ dữ liệu phức tạp trong một format gọn gàng và dễ đọc. Đây là một công cụ quan trọng với DevOps và trực quan hóa vì nó rất cần thiết trong quá trình tự động hóa và giúp các hệ thống quản lý dữ liệu hiệu quả.

YAML thường không được chú ý nhiều bởi developers tuy nhiên nó là một công cụ cực kì mạnh mẽ và đơn giản để nâng cao công việc của bạn chỉ với một vài bài học.

Hôm nay chúng ta sẽ học về YAML với các hướng dẫn hands-on và khám phá cách bạn có thể sử dụng nó trong các dự án của bạn.

YAML là gì?

YAML là một ngôn ngữ tuần tự hóa dữ liệu để lưu trữ thông tin trong dạng con người có thể đọc được. Khởi điểm nó được biết tới với “Yet Another Markup Language” nhưng sau đó được đổi thành “YAML Ain’t Markup Language” để tách nó cách biệt với một ngôn ngữ đánh dấu (markup language).

Nó tương tự XML và JSON nhưng dùng một syntax đơn giản hóa trong khi vẫn giữ được khả năng tương tự. YAML thường được dùng để tạo các file cấu hình trong IoC (Infrastructure as Code) hoặc để quản lý containers trong quy trình phát triển (development pipeline) của DevOps.

Gần đây, YAML còn được dùng để tạo các giao thức tự động hóa có thể thực thi một tập hợp các câu lệnh trong file YAML. Việc này có nghĩa là hệ thống của bạn có thể độc lập và phản hồi tốt hơn mà không cần phụ thuộc vào việc quản lý thủ công.

Với việc ngày càng nhiều công ty thu nhập văn hóa DevOps và trực quan hóa, YAML đang dần trở thành một kĩ năng bắt buộc với các vị trí developer hiện tại. YAML cũng rất dễ để kết hợp với các công nghệ đã có sẵn thông qua sự hỗ trợ của nhiều công nghệ phổ biến như Python dùng PyYAML, Docker, Ansible.

YAML (.yml):

  • Ngôn ngữ con người có thể đọc

  • Syntax tối giản

  • Được thiết kế chủ yếu cho dữ liệu

  • Inline tương tự như JSON

  • Cho phép comments

  • Chuỗi (Strings) mà không cần ngoặc kép

  • Các tính năng nâng cao

Trường hợp dùng: YAML phù hợp nhất với các ứng dụng nặng về dữ liệu sử dụng quy trình DevOps hoặc VMs. Nó cũng rất hữu ích với các developers trong team của bạn khi làm việc với loại dữ liệu này thường xuyên từ đó yêu cầu một ngôn ngữ dễ đọc.

Các chức năng tuyệt vời nhất của YAML

  1. Multi-document

Bạn có thể có nhiều YAML documents trong một file YAML duy nhất

Để ngăn cách các document ta dùng 3 dấu gạch ngang (---)

  1. Comment

YAML cho phép thêm comment trong file sử dụng (#) giống như Python comment

  1. Syntax dễ hiểu

YAML files use an indentation system similar to Python to show the structure of your program. You’re required to use spaces to create indentation rather than tabs to avoid confusion.

It also cuts much of the “noise” formatting found in JSON and XML files such as quotation marks, brackets, and braces.

Together, these formatting specifications increase the readability of YAML files beyond XML and JSON.

Notice that the same information is conveyed; however, the removal of double quotes, commas, and brackets throughout the YAML file makes it much easier to read at a glance.

  1. Ngầm định dạng (Implicit Type)

YAML offers versatility in typing by auto-detecting data types while also supporting explicit typing options. To tag data as a certain type, simply include !![typeName] before the value.

YAML syntax

  1. Khóa - giá trị (Key-value)

Cơ bản thì đa số thứ trong file YAML đều ở trong dạng khóa-giá trị nơi mà các khóa đại diện cho tên của cặp khóa-giá trị đó và giá trị là dữ liệu được gắn với tên của cặp đó. Khóa-giá trị là nền tảng cho mọi cấu trúc YAML khác.

<key>: <value>
  1. Scalars và mapping

Scalars biểu diễn một giá trị duy nhất. Scalars được giao cho tên của khóa sử dụng mapping. Bạn định nghĩa một mapping với tên, dấu hai chấm, và dấu cách sau đó gán cho nó một giá trị.

YAML hỗ trợ các loại cơ bản như integer, floating-point numeric cũng như các loại non-numeric như Boolean hay String.

Mỗi scalar có thể được biểu diễn bằng nhiều cách khác nhau như hexadecimal, octal hay exponent. Có gồm cả các loại như vô cùng (infinity), âm vô cùng (-infinity), Not a Number (NAN).

integer: 25
hex: 0x12d4 #evaluates to 4820
octal: 023332 #evaluates to 9946

float: 25.0
exponent: 12.3015e+05 #evaluates to 1230150.0

boolean: Yes
string: "25"

infinity: .inf # evaluates to infinity
neginf: -.inf #evaluates to negative infinity
not: .NAN #Not a Number
  1. Chuỗi (String)

Chuỗi là tập hợp các kí tự biểu diễn một câu hoặc cụm từ. Bạn có thể dùng (|) để in ra từng chuỗi một trên từng dòng hoặc (>) để in nó như một đoạn văn.

Chuỗi trong YAML không cần phải gói trong ngoặc kép.

str: Hello World
data: |
   These
   Newlines
   Are broken up
data: >
   This text is
   wrapped and is a
   single paragraph
  1. Cụm từ (Sequence)

Sequence là cấu trúc dữ liệu tương tự như một danh sách hoặc mảng gồm nhiều giá trị trong cùng một khóa. Có thể sử dụng dạng block hoặc inline flow.

Dạng block sử dụng các dấu cách để cấu trúc document. Cách này sẽ dễ dọc nhưng không gọn gàng như inline flow.

--- 
# Shopping List Sequence in Block Style
shopping: 
- milk
- eggs
- juice

Dạng flow cho phép viết cụm từ inline sử dụng dấu ngoặc vuông ([]) tương tự như định nghĩa một mảng trong Python hay JavaScript. Flow gọn gàng hơn nhưng khó đọc khi mới nhìn qua hơn block.

--- 
# Shopping List Sequence in Flow Style
shopping: [milk, eggs, juice]
  1. Từ điển (Dictionary)

Từ điển là tập hợp các cặp khóa-giá trị trong cùng một subgroup. Kiểu syntax này hữu dụng để chia dữ liệu ra thành các loại logic để sau này dùng.

Từ điển được định nghĩa như mapping trong đó bạn điền tên từ điển, một dấu hai chấm, một dấu cách sau đó là 1 hoặc nhiều cặp khóa-giá trị.

# An employee record
Employees: 
- dan:
    name: Dan D. Veloper
    job: Developer
    team: DevOps
- dora:
   name: Dora D. Veloper
   job: Project Manager
   team: Web Subscriptions
💡
Từ điển có thể chứa nhiều cấu trúc phức tạp hơn ví dụ như cụm từ để biểu diễn dữ liệu phức tạp hơn.

Kết luận

Chúng ta đã tìm hiểu nguồn gốc cũng như các tính năng và sự hữu dụng của YAML trong công việc của không chỉ của các DevOps Engineer mà còn là của cả team công nghệ trong một dự án, một doanh nghiệp. Ngoài các chức năng cơ bản trên, YAML còn nhiều chức năng khác như template, anchor, ... mà các bạn có thể tìm hiểu sâu hơn sau khi đã hiểu các định nghĩa ở trên. Mong rằng qua bài viết này các bạn có thể sử dụng và làm việc với YAML hiệu quả nhất.