TUẦN TỰ HÓA DỮ LIỆU VÀ ĐỊNH DẠNG DỮ LIỆU JSON
Trong hành trình trở thành một kỹ sư mạng hiện đại với kỹ năng tự động hóa, bạn sẽ học cách hiểu cách thức một số ngôn ngữ thực hiện việc tuần tự hóa dữ liệu. Mỗi ngôn ngữ tuần tự hóa dữ liệu cung cấp các phương pháp sử dụng để mô tả các biến, với mục tiêu có thể gửi văn bản đó qua mạng hoặc để lưu trữ văn bản đó trong tập tin. Mỗi ngôn ngữ tuần tự hóa dữ liệu cho phép các máy chủ API trả về dữ liệu để máy khách API có thể sao chép giống nhau các biến cũng như cấu trúc dữ liệu như được tìm thấy trên máy chủ API. Để mô tả các cấu trúc dữ liệu, ngôn ngữ tuần tự hóa bao gồm các ký tự đặc biệt và quy ước truyền đạt ý tưởng về danh sách biến, từ điển và cấu trúc dữ liệu phức tạp hơn.
Phần chính thứ hai của chương này kiểm tra khái niệm về ngôn ngữ tuần tự hóa dữ liệu, tập trung vào một ngôn ngữ mô hình hóa dữ liệu như được đề cập trong CCNA hiện tại: JavaScript Object Notation (JSON).
Sự cần thiết cho một mô hình dữ liệu với các API
Đầu tiên, hình 18-10 đưa ra ví dụ như một cách để xác định một số thách thức với sao chép các giá trị biến từ thiết bị này sang thiết bị khác. Sau đó, hình 18-11 cho thấy cách sử dụng một ngôn ngữ tuần tự hóa dữ liệu để giải quyết các vấn đề được hiển thị trong hình 18-10.
Hình 18-10 Các thách thức khi gửi một biến từ thiết bị này sang thiết bị khác
Đầu tiên, hãy xem xét các bước được đánh số trong hình 18-10. REST Client yêu cầu tài nguyên và máy chủ cần trả lời. Trong REST, tài nguyên là một tập hợp các biến được xác định bởi API, vì vậy máy chủ REST cần trả về một tập hợp các biến cho máy REST Client bên trái. Các bước trong hình chạy như sau:
1. Máy chủ REST lấy một bản sao của lưu trữ các biến trong RAM (bước 1) để đáp ứng yêu cầu REST.
2. Mã REST API tạo REST response và gửi nó qua mạng, đặt một bản sao chính xác của những gì máy chủ REST có trong RAM để đại diện cho các biến trong tài nguyên đó.
3. Máy REST client nhận được thông báo phản hồi REST, lưu trữ chính xác các bit và byte vào RAM của nó, trong một cố gắng có một bản sao của các biến, dữ liệu và cấu trúc dữ liệu trên máy chủ
Đầu tiên, các chương trình được viết bằng các ngôn ngữ khác nhau sử dụng khác nhau quy ước để lưu trữ các biến của họ trong nội bộ vì không có tiêu chuẩn cho lưu trữ biến nội bộ trên ngôn ngữ. Trong thực tế, các chương trình được viết trong cùng một ngôn ngữ nhưng với các phiên bản khác nhau của ngôn ngữ đó không thể lưu trữ tất cả các biến của chúng với cùng một quy ước nội bộ.
Để khắc phục những vấn đề này, các ứng dụng cần một phương thức tiêu chuẩn biểu diễn các biến để truyền và lưu trữ các biến đó bên ngoài chương trình. Ngôn ngữ tuần tự hóa dữ liệu cung cấp chức năng đó.
Hình 18-11 cho thấy dòng quy trình chính xác, so sánh với hình 18-10 với việc tuần tự hóa dữ liệu quy trình bao gồm:
1. Máy chủ thu thập dữ liệu nội bộ và cung cấp cho API.
2. API chuyển đổi biểu diễn bên trong thành mô hình dữ liệu đại diện cho các biến đó (với JSON được hiển thị trong hình).
3. Máy chủ gửi mô hình dữ liệu ở định dạng JSON thông qua các thông điệp.
4. Máy REST Client lấy dữ liệu nhận được và chuyển đổi dữ liệu được định dạng JSON thành các biến ở định dạng gốc của máy khách ứng dụng.
Hình 18-11 Trao đổi biến
Khi kết thúc quá trình, ứng dụng REST Client bây giờ có các biến tương đương với các biến nó yêu cầu từ máy chủ trong lệnh gọi API. Lưu ý rằng bước cuối cùng để chuyển đổi từ ngôn ngữ tuần tự hóa dữ liệu sang định dạng gốc có thể chỉ là một dòng mã!
Cuối cùng, lưu ý rằng trong khi các ngôn ngữ tuần tự hóa dữ liệu như JSON cho phép các ứng dụng trao đổi các biến qua một mạng, ứng dụng cũng có thể lưu trữ dữ liệu trong định dạng JSON.
Ngôn ngữ tuần tự hóa dữ liệu
Bạn sẽ nghe và sử dụng một số dữ liệu ngôn ngữ mô hình hóa và tuần tự hóa dữ liệu khi bạn càng tìm hiểu nhiều về tự động hóa mạng. Hiện tại, chương trình CCNA chỉ đề cập đến JSON. Chúng ta học thêm về một số lựa chọn thay thế có thể hữu ích cho kiến thức mới của bạn về JSON. Những ngôn ngữ tuần tự hóa dữ liệu khác nhau tồn tại đáp ứng các nhu cầu khác nhau đã phát sinh trong những năm qua.
JSON (JavaScript Object Notation)
JSON có thể hiển thị dữ liệu ở dạng sao cho máy cũng có thể đọc được, người cũng có thể đọc được. Chỉ cần hiểu một vài quy tắc JSON, hầu hết mọi người đều có thể đọc dữ liệu JSON, bằng cách đơn giản là đoán ý nghĩa của nó và tự tin diễn giải các cấu trúc dữ liệu được xác định bởi JSON. Đồng thời, dữ liệu JSON làm cho nó dễ dàng cho các chương trình chuyển đổi văn bản JSON thành các biến, làm cho nó rất hữu ích để trao đổi dữ liệu giữa các ứng dụng sử dụng API.
Bạn có thể tìm thấy các chi tiết của JSON trong IETF RFC 8259 và trong một số trang web được tìm thấy với các tìm kiếm trên Internet, bao gồm www.json.org.
XML
Trở lại những năm 1990, khi các trình duyệt web và World Wide Web (WWW) lần đầu tiên được tạo, các trang web sử dụng chủ yếu HTML để xác định các trang web. Là ngôn ngữ đánh dấu, HTML được xác định làm thế nào để thêm văn bản hoặc một trang web vào một tập tin và sau đó thêm văn bản đánh dấu cho văn bản sẽ được hiển thị. Chẳng hạn, đánh dấu bao gồm mã cho các tiêu đề, loại phông chữ, kích cỡ, màu sắc, siêu liên kết.
Ngôn ngữ đánh dấu có thể mở rộng (XML) thực hiện một số cải tiến cho các ngôn ngữ đánh dấu trước đó. Đặc biệt, số lượng các trang web theo thời gian đã trở nên nhiều hơn và biến động hơn. Để làm cho các trang web động, các tệp cần thiết để lưu trữ các biến có giá trị có thể thay đổi và được thay thế theo thời gian bởi máy chủ web. Để định nghĩa các biến được thay thế vào một trang web, thế giới cần một ngôn ngữ đánh dấu có thể xác định dữ liệu biến. XML định nghĩa một ngôn ngữ đánh dấu có nhiều tính năng để xác định biến, giá trị và dữ liệu cấu trúc.
Theo thời gian, XML đã phát triển vượt quá mức sử dụng ban đầu của nó như là một ngôn ngữ đánh dấu. Các tính năng XML cũng làm cho nó là ngôn ngữ tuần tự hóa dữ liệu hữu ích chung và được sử dụng ngày nay như theo cách đó.
So sánh XML với JSON, cả hai đều cố gắng làm người có thể đọc được, nhưng với XML khó khăn hơn một chút để đọc cho người bình thường. Chẳng hạn, như HTML, XML sử dụng các thẻ bắt đầu và kết thúc cho mỗi biến, như đã thấy trong ví dụ 18-4. Trong dòng được tô sáng trong ví dụ: thẻ <macAddress> và </ macAddress> biểu thị một tên biến, với giá trị nằm giữa các thẻ.
Ví dụ 18-4 Kết quả từ lệnh gọi REST API
YAML
Ngôn ngữ đánh dấu YAML Ain’t Markup Language (YAML) là một cái tên có một sự thông minh đệ quy, nhưng tên này cho chúng ta biết điều gì đó. YAML không cố gắng xác định chi tiết đánh dấu (trong khi XML có). Thay vào đó, YAML tập trung vào mô hình dữ liệu (cấu trúc) chi tiết. YAML cũng cố gắng để được đơn giản và khúc chiết. YAML dễ dàng dễ đọc nhất cho bất cứ ai mới đối với các mô hình dữ liệu.
Ansible, một trong những chủ đề trong chương 19, sử dụng YAML. Ví dụ 18-5 cho thấy một ví dụ mẫu ngắn gọn. Để đưa ra quan điểm về khả năng đọc, ngay cả khi bạn không có ý tưởng những gì Ansible làm, bạn có thể đoán tại một số chức năng. (Lưu ý rằng YAML biểu thị các biến trong ngoặc kép: {{}}.)
Ví dụ 18-5 Tệp YAML được sử dụng bởi Ansible
JSON
ví dụ 18-6 liệt kê hai thiết bị (có thể là tên máy chủ của chúng) và danh sách các giao diện trên mỗi thiết bị.
Ví dụ 18-6 JSON đơn giản liệt kê một router interfaces
JSON: Các cặp khóa/giá trị (key/value)
Trước tiên, hãy xem xét các quy tắc về cặp khóa:giá trị trong JSON:
● Khóa: Cặp giá trị: Mỗi và mỗi dấu hai chấm xác định một khóa: value cặp, với khóa trước dấu hai chấm và giá trị sau dấu hai chấm.
● Key: Dạng text, bên trong dấu ngoặc kép, trước dấu hai chấm, được sử dụng làm tên tham chiếu một giá trị.
● Giá trị: Mục sau dấu hai chấm biểu thị giá trị của khóa, có thể là
o Văn bản: Được liệt kê trong dấu ngoặc kép.
o Số: Được liệt kê mà không có dấu ngoặc kép
o Mảng: Một giá trị đặc biệt (chi tiết sẽ đề cập sau).
o Đối tượng: Một giá trị đặc biệt (chi tiết hơn sẽ đề cập sau)
● Nhiều cặp: Khi liệt kê nhiều cặp khóa: giá trị, hãy tách riêng các cặp có dấu phẩy ở cuối mỗi cặp (trừ cặp cuối cùng).
Để thực hiện một số quy tắc này, hãy xem xét ví dụ 18-7 dữ liệu JSON. JSON tập trung vào ba cặp khóa: giá trị.
Ví dụ 18-7 Một đối tượng JSON (từ điển) với ba cặp khóa:giá trị
Như một cách tiếp cận, chúng ta chỉ cần tìm từng dấu hai chấm và tìm kiếm trích dẫn chuỗi ngay trước mỗi dấu hai chấm. Đó là những chìa khóa (“1stbest”, “2ndbest”, and “3rdbest”) và sau đó tìm đến bên phải của mỗi dấu hai chấm để tìm giá trị khớp của chúng. Bạn có thể biết cả ba giá trị là giá trị văn bản vì JSON liệt kê các giá trị trong dấu ngoặc kép.
Đối với các ký tự đặc biệt khác, lưu ý dấu phẩy và dấu dấu ngoặc nhọn. Hai khóa đầu tiên: các cặp giá trị kết thúc bằng một dấu phẩy, có nghĩa là sẽ có một cặp khóa:giá trị khác theo sau. Dấu ngoặc nhọn bắt đầu và kết thúc dữ liệu biểu thị một đối tượng JSON.
Giải thích các đối tượng và mảng JSON
Để giao tiếp cấu trúc dữ liệu ngoài một cặp khóa: giá trị với một giá trị đơn giản, JSON sử dụng các JSON object và JSON array. Đối tượng có thể linh hoạt, nhưng trong hầu hết cách sử dụng, nó hành động như một từ điển. Mảng liệt kê một loạt các giá trị.
Python, ngôn ngữ phổ biến nhất để sử dụng cho tự động hóa mạng, chuyển đổi các đối tượng JSON object thành Python dictionary và JSON array cho Python list.
● { } - Đối tượng: Một chuỗi các cặp khóa: giá trị được đặt trong một cặp dấu ngoặc nhọn.
● [ ] - Mảng: Một loạt các giá trị (không phải cặp khóa: giá trị) được đặt trong cặp ngoặc vuông.
● Các cặp khóa: giá trị bên trong các đối tượng: Tất cả các cặp khóa: giá trị bên trong một đối tượng tuân thủ các quy tắc trước đó cho các cặp khóa:giá trị.
● Giá trị bên trong mảng: Tất cả các giá trị tuân thủ các quy tắc trước đó cho định dạng giá trị.
Ví dụ 18-8 hiển thị một mảng duy nhất ở định dạng JSON. Lưu ý dữ liệu JSON bắt đầu bằng “[“, sau đó liệt kê ba giá trị văn bản (các giá trị có thể là một hỗn hợp các giá trị). Sau đó kết thúc bằng một dấu ngoặc vuông “]”
Ví dụ 18-8 Một đoạn mã JSON hiển thị một JSON đơn Lập danh sách)
Hình 18-12 Dữ liệu JSON chính xác / hoàn chỉnh với một đối tượng, hai khóa, hai giá trị danh sách JSON
Bây giờ hãy nghĩ về toàn bộ cấu trúc của dữ liệu JSON trong hình 18-12. Nó có một cặp dấu ngoặc nhọn phù hợp để bắt đầu và kết thúc văn bản, gói gọn một đối tượng. Đối tượng chứa hai dấu hai chấm, vì vậy có hai cặp khóa:giá trị bên trong đối tượng.
Hình 18-13 Biểu diễn cấu trúc của hình Đối tượng chính 18-13 và hai cặp khóa:giá trị
Để hiểu ý tưởng về cách tìm các đối tượng JSON, xem xét ví dụ hiển thị trong Hình 18-14. Con số này hiển thị cú pháp JSON chính xác. Nó có những điều sau đây:
● Có một đối tượng toàn cục vì nó bắt đầu và kết thúc bằng dấu ngoặc nhọn.
● Đối tượng bên ngoài có hai khóa (Wendells_favorites và giao diện_config).
● Giá trị của mỗi cặp khóa:value là một đối tượng khác (mỗi cặp có xoăn niềng răng và ba khóa: cặp giá trị).
Hình 18-14 Một đối tượng JSON, có hai cặp khóa:giá trị.
Cho đến nay, tất cả các ví dụ JSON hiển thị rất nhiều không gian trống. JSON cho phép khoảng trắng, hoặc không, tùy thuộc vào nhu cầu. Đối với con người, đọc JSON có thể dễ dàng hơn rất nhiều. Khi được lưu trữ trong một tệp hoặc được gửi trong mạng, JSON sẽ không sử dụng khoảng trắng. Ví dụ 18-7 cho thấy một đối tượng JSON có ba cặp key:giá trị, với khoảng trắng. Tuy nhiên, được lưu trữ trong một tệp hoặc được gửi qua mạng, JSON sẽ như sau:
Hầu hết các công cụ bạn có thể sử dụng khi làm việc với JSON sẽ cho phép bạn chuyển đổi từ một định dạng đẹp (tốt cho con người) đến một định dạng thô (tốt cho máy tính). Bạn có thể thấy phiên bản đẹp được gọi là đẹp, trong khi phiên bản không có thêm khoảng trắng có thể được gọi là rút gọn hoặc thô.