YAML là ngôn ngữ trao đổi dữ liệu thường được sử dụng trong các tệp cấu hình. Nó được sử dụng với các công cụ quản lý cấu hình như Ansible và các công cụ điều phối container, như Kubernetes . YAML 1.2 là siêu tập hợp của JSON và có thể mở rộng với các kiểu dữ liệu tùy chỉnh. Vì YAML rất phổ biến với các bản dựng tự động và phân phối liên tục , bạn có thể tìm thấy các tệp YAML được sử dụng thông qua nhiều kho lưu trữ GitHub công khai. Hướng dẫn tham khảo này đóng vai trò là phần giới thiệu về YAML và cung cấp các ví dụ để làm rõ các đặc điểm của ngôn ngữ.
Hãy xem xét đoạn trích ví dụ từ tệp YAML của Kubernetes:
apiVersion: v1
kind: Pod
metadata:
name: apache-pod
labels:
app: web
Tệp YAML này định nghĩa phiên bản API đang sử dụng, loại tài nguyên Kubernetes mà bạn muốn định nghĩa và siêu dữ liệu về tài nguyên. Bạn không cần phải quen thuộc với Kubernetes để đọc qua các cấu hình của tệp và vẫn có thể hiểu chung về mục đích của từng thiết lập. Khả năng đọc hiểu của con người được coi là một trong những lợi thế của YAML so với các định dạng như XML hoặc JSON.
Bắt đầu với YAML
YAML hoạt động trên nhiều hệ điều hành, môi trường ảo và nền tảng dữ liệu. Nó thường được sử dụng nhất để kiểm soát cách thức hoạt động của hệ thống. Ví dụ, bạn có thể cấu hình GitHub Actions bằng YAML. Siêu dữ liệu bạn định nghĩa trong tệp YAML của GitHub Actions xác định các đầu vào và đầu ra cần thiết để hoàn thành các tác vụ trong kho lưu trữ GitHub của bạn.
Bạn cũng có thể sử dụng YAML để trao đổi dữ liệu. Bạn có thể sử dụng YAML làm định dạng dữ liệu để truyền hóa đơn, để ghi lại trạng thái tức thời của trò chơi kéo dài hoặc để giao tiếp giữa các hệ thống con trong máy móc vật lý phức tạp.
Ba quy tắc cơ bản
Bạn có thể bắt đầu sử dụng YAML với một vài quy tắc cơ bản. Để bắt đầu, hãy tập trung vào ba lĩnh vực sau:
- thụt lề
- dấu hai chấm
- dấu gạch ngang
thụt lề
YAML thể hiện dữ liệu trong các mối quan hệ phân cấp thông qua thụt lề. Một số ký tự trống cố định được sử dụng để thụt lề. Hãy xem tệp YAML GitHub Actions mẫu sau:
...
jobs:
blueberry:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
...
Thụt lề được sử dụng trong tệp ví dụ cho thấy rằng runs-on
, và steps
là một phần của cùng một khối . Đây là tín hiệu cú pháp cho thấy cả hai đều là một phần của cùng một phạm vi . Theo quy ước, hai khoảng trắng thường được sử dụng khi cần thụt lề. Không nên sử dụng tab để thụt lề.
Dấu hai chấm
Dấu hai chấm phân tách khóa và giá trị của chúng. Ở cấp độ chính thức, YAML chỉ định rằng một số khoảng trắng tùy ý có thể theo sau dấu hai chấm. Tuy nhiên, theo quy ước, một khoảng trắng duy nhất nên được sử dụng sau dấu hai chấm. Ví dụ:
...
runs-on: ubuntu-latest
...
Dấu gạch ngang
Dấu gạch ngang ( -
) được sử dụng để biểu thị một danh sách. Ví dụ sau được lấy từ API v4 của Linode , sử dụng thông số kỹ thuật OpenAPI 3 .
...
requestBody:
description: Information about the OAuth Client to create.
content:
application/json:
schema:
required:
- label
- redirect_uri
...
Danh sách này required
chỉ định các thuộc tính bắt buộc của đối tượng. Trong ví dụ, các thuộc tính bắt buộc này là label
và redirect_uri
. Các phần tiếp theo bao gồm nhiều ví dụ hơn về thụt lề, dấu hai chấm và dấu gạch ngang.
Các kiểu dữ liệu cơ bản của YAML
YAML có ba kiểu dữ liệu cơ bản:
- số vô hướng
- danh sách hoặc trình tự
- mảng liên kết hoặc từ điển
Số vô hướng
Một số vô hướng có thể là một giá trị số, một chuỗi văn bản hoặc một giá trị boolean như true
hoặc false
. Bạn cũng có thể biểu thị một null
giá trị, được diễn giải là absent
hoặc unknown
.
...
properties:
address:
type: string
format: ip
description: "The IP address."
example: 97.107.143.141
...
Ví dụ YAML sử dụng một số giá trị vô hướng cho address
thuộc tính. Lưu ý rằng description
thuộc tính sử dụng dấu ngoặc kép quanh chuỗi, trong khi thuộc format
tính thì không. Sử dụng dấu ngoặc kép đơn ' '
hoặc kép " "
cho phép bạn bao gồm các ký tự YAML được dành riêng đặc biệt trong chuỗi của mình mà không gặp phải lỗi phân tích cú pháp.
Danh sách
Để định nghĩa một danh sách trong YAML, mỗi giá trị danh sách được biểu thị bằng dấu gạch ngang mở -
, khoảng trắng và giá trị. Không được đặt bất kỳ giá trị nào khác trên cùng một dòng.
...
status:
type: string
enum:
- disabled
- pending
- ok
- problem
...
Đoạn mã ví dụ này định nghĩa các giá trị có thể có cho status
thuộc tính bằng cách sử dụng danh sách bên dưới enum
khóa. Bạn cũng có thể lồng các danh sách của mình khi cần. Ví dụ:
security:
- personalAccessToken: []
- oauth:
- account:read_only
Từ điển
YAML hỗ trợ các mảng liên kết hoặc từ điển . Trình bày khóa-giá trị của tất cả các ví dụ trên thực tế là một từ điển; ví description
dụ, đối với khóa, giá trị là "The IP address."
.
...
properties:
address:
type: string
format: ip
description: "The IP address."
example: 97.107.143.141
...
Từ điển đạt được nhiều sức mạnh khi kết hợp với các kiểu dữ liệu khác. Ví dụ, một giá trị có thể là một danh sách và các giá trị của danh sách có thể là một từ điển khác.
So sánh YAML với các định dạng dữ liệu khác
Để hiểu rõ YAML, bạn nên so sánh nó với các định dạng khác mà bạn có thể hiểu rõ hơn. Các so sánh trong các phần tiếp theo cũng giúp làm nổi bật ưu điểm và nhược điểm của từng định dạng. Điều này có thể giúp bạn tận dụng tối đa từng định dạng.
YAML so với JSON
Ký hiệu đối tượng JavaScript (JSON) là một định dạng tệp chuẩn mở. Nó thường được sử dụng với cấu hình trình duyệt hoặc giao tiếp.
Nội dung JSON là nội dung YAML. YAML là siêu tập của JSON. Tuy nhiên, cú pháp của YAML thoải mái hơn.
- Bạn có thể sử dụng khóa chuỗi không có dấu ngoặc kép với YAML, điều mà JSON không cho phép. YAML cho phép sử dụng dấu ngoặc đơn, thay vì dấu ngoặc kép mà JSON yêu cầu đối với chuỗi.
- Bạn có thể thêm chú thích vào tệp YAML của mình. JSON không hỗ trợ chú thích.
- YAML có cú pháp đặc biệt để định nghĩa các kiểu dữ liệu tùy chỉnh. Điều này có nghĩa là bạn có thể mở rộng YAML vượt ra ngoài định nghĩa cơ sở của nó.
- YAML còn vượt xa JSON trong việc hỗ trợ các neo, bí danh, chỉ thị và khóa hợp nhất.
YAML so với XML
Bạn có thể sử dụng YAML và XML để thể hiện cùng một dữ liệu. Vì lý do này, một số ứng dụng hỗ trợ cả hai ngôn ngữ. Tuy nhiên, về mặt cú pháp, YAML và XML rất khác nhau.
Nhìn chung, XML dài dòng hơn, nhưng cũng dễ sử dụng hơn khi thể hiện nội dung giống tài liệu. YAML ngắn gọn hơn. Dưới đây là ví dụ về cách mỗi loại có thể thể hiện cùng một dữ liệu:
<?xml version=”1.0”?>
<catalogue>
<book>
<author>Homer</author>
<title>Illiad</title>
<genre>epic poem</genre>
</book>
<book>
<author>William Gilbert</author>
<title>On the Magnet and Magnetic Bodies ...</title>
<genre>natural philosophy</genre>
</book>
</catalogue>
---
catalogue:
-
author: Homer
genre: "epic poem"
title: Illiad
-
author: "William Gilbert"
genre: "natural philosophy"
title: "On the Magnet and Magnetic Bodies …"
Dấu ngoặc kép và dấu ngoặc đơn
Dấu hai chấm, dấu ngoặc kép, dấu phẩy và các dấu câu khác đều là một phần của cú pháp YAML. Khi sử dụng chúng trong các giá trị chuỗi, cần đặc biệt chú ý.
- Khi sử dụng giá trị chuỗi, bạn không cần phải sử dụng dấu ngoặc kép, nhưng bạn có thể sử dụng dấu ngoặc kép để buộc giá trị số được hiểu là chuỗi.
- Sử dụng dấu ngoặc kép để đảm bảo các ký tự đặc biệt không bị phân tích cú pháp.
- Sử dụng dấu ngoặc kép khi bạn muốn phân tích cú pháp mã thoát, như
\n
. Nếu sử dụng dấu ngoặc đơn, mã thoát sẽ không được phân tích cú pháp.
Lặn sâu hơn
Để tìm hiểu sâu hơn về cú pháp YAML, kho lưu trữ chính thức cho thông số kỹ thuật YAML 1.2 được duy trì công khai trên GitHub, cũng như ngữ pháp cho YAML 1.2 .
Toàn bộ đặc tả YAML 1.2 khá phức tạp. Nó có 211 quy tắc ngữ pháp và đặc tả bốn phần, với nhiều chi tiết hơn được lên kế hoạch cho các phiên bản 1.5 và 2.0 sắp tới. Có thể sử dụng YAML với sự hiểu biết về các thành phần nền tảng chính của nó, một số trong đó đã được đề cập trong hướng dẫn này.
Công cụ YAML
Có rất nhiều công cụ giúp người mới làm quen với YAML. Trong số đó có một số trình kiểm tra lỗi YAML tự động, bao gồm YAML Lint . Các công cụ khác có thể thu hút người mới làm quen với YAML là:
- Bộ chuyển đổi giữa các định dạng khác và YAML. Ví dụ, VS Code cung cấp tiện ích mở rộng YAML sang JSON .
- Công cụ làm đẹp YAML. VS Code Prettier – Code formatter là một lựa chọn phổ biến.
Bạn có thể tìm thêm nhiều công cụ giúp bạn làm việc với YAML bằng cách sử dụng tài liệu tham khảo công cụ YAML trực tuyến .
Thông tin thêm
Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.
Nguồn: https://www.linode.com/docs/guides/yaml-reference/