Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • XML, JSON và YAML – 3 định dạng dữ liệu mà Network Engineer nên biết

    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:
    • 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
    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.
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X