Trong quá trình làm việc với các hệ thống, đặc biệt là hạ tầng mạng, cloud hoặc AI, ta thường phải lưu trữ và trao đổi thông tin cấu hình giữa các hệ thống hoặc giữa con người với phần mềm. Những dữ liệu đó có cấu trúc rõ ràng, ví dụ như: tên interface, loại interface, trạng thái enable, vị trí...
Các định dạng phổ biến để lưu trữ và truyền dữ liệu có cấu trúc này gồm:
📦 1. XML (eXtensible Markup Language)
Ví dụ:
<interface> <name>eth0</name> <type>ethernetCsmacd</type> <location>0</location> <enabled>true</enabled> <if-index>2</if-index> </interface>
- Có cấu trúc thẻ mở & đóng như HTML.
- Ưu điểm: Có thể xác thực (validation) cấu trúc bằng schema (XSD).
- Nhược điểm: Khó đọc hơn, dài dòng.
- Ứng dụng: Thường dùng trong các hệ thống cũ, hoặc các giao tiếp cần xác thực dữ liệu chặt chẽ (ví dụ: thiết bị mạng dùng NETCONF).
🧩 2. JSON (JavaScript Object Notation)
Ví dụ:
{ "interface": { "name": "eth0", "type": "ethernetCsmacd", "location": "0", "enabled": true, "if-index": 2 } }
- Dạng key-value pairs (cặp khóa - giá trị).
- Ưu điểm: Gọn, dễ đọc, dễ xử lý bởi chương trình.
- Ứng dụng: Rất phổ biến trong các API (ví dụ REST API), hoặc khi truyền dữ liệu giữa server và client.
🧾 3. YAML (YAML Ain’t Markup Language)
Ví dụ:
interface: name: eth0 type: ethernetCsmacd location: 0 enabled: true if-index: 2
- Cũng là dạng key-value, nhưng gọn hơn JSON, không cần dấu ngoặc hay dấu phẩy.
- Ưu điểm: Dễ đọc hơn, phù hợp với file cấu hình.
- Ứng dụng: Dùng nhiều trong DevOps và Automation tools như Ansible, Kubernetes, Docker Compose.
🧠 Ví dụ thực tế
- Khi bạn cấu hình thiết bị Cisco bằng Ansible, bạn sẽ viết YAML để định nghĩa các interface.
- Khi bạn gọi API từ một hệ thống giám sát để lấy trạng thái thiết bị, kết quả trả về thường là JSON.
- Nếu bạn dùng hệ thống cũ như NETCONF/YANG, bạn sẽ thấy XML xuất hiện rất nhiều.
✅ Tóm lại cho dễ nhớ:
- XML: cổ điển, nghiêm túc, xác thực tốt – dùng trong các giao thức mạng như NETCONF.
- JSON: trẻ trung, phổ biến, dễ dùng – dùng trong APIs.
- YAML: nhẹ nhàng, dễ đọc – dùng trong tự động hóa như Ansible.