XML, JSON và YAML – 3 định dạng dữ liệu mà Network Engineer nên biết
Trong Network Automation và API, dữ liệu không còn chỉ xuất hiện dưới dạng các dòng lệnh CLI. Các hệ thống cần một cách có cấu trúc (structured) để trao đổi cấu hình và trạng thái thiết bị.
Ba định dạng phổ biến là XML, JSON và YAML. 1. XML – Extensible Markup Language
XML tổ chức dữ liệu bằng các tag mở và tag đóng, khá giống HTML.
<interface>
<name>eth0</name>
<type>ethernetCsmacd</type>
<location>0</location>
<enabled>true</enabled>
<if-index>2</if-index>
</interface>
Ưu điểm của XML là cấu trúc chặt chẽ, hỗ trợ namespace, schema và validation tốt. Nhược điểm là khá dài và nhiều tag.
Trong networking, XML đặc biệt quen thuộc khi làm việc với:
Ví dụ, NETCONF thường sử dụng XML encoding để trao đổi dữ liệu giữa Network Controller và thiết bị.
2. JSON – JavaScript Object Notation
JSON biểu diễn dữ liệu chủ yếu dưới dạng key-value pair:
{
"name": "eth0",
"type": "ethernetCsmacd",
"location": "0",
"enabled": true,
"if-index": 2
}
So với XML, JSON thường:
Ví dụ Network Engineer gọi API:
GET /api/interfaces
Server có thể trả về:
{
"name": "GigabitEthernet1",
"enabled": true
}
Chương trình Python sau đó parse JSON để lấy dữ liệu cần thiết.
3. YAML – YAML Ain't Markup Language
YAML cũng biểu diễn dữ liệu theo key-value nhưng được thiết kế để con người đọc và viết dễ dàng.
interface:
name: eth0
type: ethernetCsmacd
location: 0
enabled: true
if-index: 2
YAML sử dụng indentation (thụt dòng) để thể hiện cấu trúc. Vì vậy cần đặc biệt chú ý khoảng trắng.
Network Engineer thường gặp YAML khi sử dụng:
Ví dụ một Ansible Playbook:
- hosts: routers
tasks:
- name: Configure interface
ios_config:
lines:
- description WAN-Link
XML, JSON và YAML khác nhau ở đâu?
Có thể nhớ nhanh như sau:
Một điểm cần làm rõ từ hình: YANG không phải XML. YANG là ngôn ngữ mô hình hóa dữ liệu (data modeling language). Dữ liệu tuân theo một YANG model có thể được mã hóa/biểu diễn bằng XML hoặc JSON tùy giao thức và hệ thống. Network Engineer nên nhớ
Trong thực tế Network Automation:
NETCONF → thường gặp XML
REST API/RESTCONF → thường gặp JSON
Ansible Playbook → thường viết YAML
Ví dụ, chúng ta có thể viết một Ansible Playbook bằng YAML, playbook gọi REST API, API gửi/nhận dữ liệu bằng JSON, trong khi một hệ thống NETCONF khác trao đổi dữ liệu bằng XML.
Vì vậy, XML, JSON và YAML không phải ba công nghệ cạnh tranh để chọn một. Chúng là những cách biểu diễn dữ liệu có cấu trúc phục vụ các mục đích khác nhau trong Automation, API, DevOps và Network Programmability.
Trong Network Automation và API, dữ liệu không còn chỉ xuất hiện dưới dạng các dòng lệnh CLI. Các hệ thống cần một cách có cấu trúc (structured) để trao đổi cấu hình và trạng thái thiết bị.
Ba định dạng phổ biến là XML, JSON và YAML. 1. XML – Extensible Markup Language
XML tổ chức dữ liệu bằng các tag mở và tag đóng, khá giống HTML.
<interface>
<name>eth0</name>
<type>ethernetCsmacd</type>
<location>0</location>
<enabled>true</enabled>
<if-index>2</if-index>
</interface>
Ưu điểm của XML là cấu trúc chặt chẽ, hỗ trợ namespace, schema và validation tốt. Nhược điểm là khá dài và nhiều tag.
Trong networking, XML đặc biệt quen thuộc khi làm việc với:
- NETCONF
- YANG
- API của nhiều thiết bị mạng
Ví dụ, NETCONF thường sử dụng XML encoding để trao đổi dữ liệu giữa Network Controller và thiết bị.
2. JSON – JavaScript Object Notation
JSON biểu diễn dữ liệu chủ yếu dưới dạng key-value pair:
{
"name": "eth0",
"type": "ethernetCsmacd",
"location": "0",
"enabled": true,
"if-index": 2
}
So với XML, JSON thường:
- ngắn gọn hơn,
- dễ đọc,
- dễ xử lý bằng Python,
- rất phổ biến với REST API.
Ví dụ Network Engineer gọi API:
GET /api/interfaces
Server có thể trả về:
{
"name": "GigabitEthernet1",
"enabled": true
}
Chương trình Python sau đó parse JSON để lấy dữ liệu cần thiết.
3. YAML – YAML Ain't Markup Language
YAML cũng biểu diễn dữ liệu theo key-value nhưng được thiết kế để con người đọc và viết dễ dàng.
interface:
name: eth0
type: ethernetCsmacd
location: 0
enabled: true
if-index: 2
YAML sử dụng indentation (thụt dòng) để thể hiện cấu trúc. Vì vậy cần đặc biệt chú ý khoảng trắng.
Network Engineer thường gặp YAML khi sử dụng:
- Ansible
- Kubernetes
- CI/CD Pipeline
- Infrastructure as Code
- các hệ thống automation.
Ví dụ một Ansible Playbook:
- hosts: routers
tasks:
- name: Configure interface
ios_config:
lines:
- description WAN-Link
XML, JSON và YAML khác nhau ở đâu?
Có thể nhớ nhanh như sau:
| XML | Tag < >, chặt chẽ | NETCONF, YANG-based systems |
| JSON | Key-value, gọn | REST API, RESTCONF |
| YAML | Key-value, dễ đọc/viết | Ansible, Kubernetes, CI/CD |
Trong thực tế Network Automation:
NETCONF → thường gặp XML
REST API/RESTCONF → thường gặp JSON
Ansible Playbook → thường viết YAML
Ví dụ, chúng ta có thể viết một Ansible Playbook bằng YAML, playbook gọi REST API, API gửi/nhận dữ liệu bằng JSON, trong khi một hệ thống NETCONF khác trao đổi dữ liệu bằng XML.
Vì vậy, XML, JSON và YAML không phải ba công nghệ cạnh tranh để chọn một. Chúng là những cách biểu diễn dữ liệu có cấu trúc phục vụ các mục đích khác nhau trong Automation, API, DevOps và Network Programmability.