API Testing – JSON và XML (Phần 2)

5 min read

Định dạng data trong API thường dùng 2 loại chính là JSON  (JavaScript Object Notation) và XML (Extensible Markup Language)


I. JSON (JavaScript Object Notation)

JSON hiện nay là một trong những định dạng dữ liệu phổ biến nhất, đặc biệt được sử dụng rộng rãi trong các API (Application Programming Interface), đặc biệt là Restful API. JSON có nguồn gốc từ ngôn ngữ lập trình JavaScript, nhưng đã trở nên độc lập với ngôn ngữ này và có thể được sử dụng với hầu hết các ngôn ngữ lập trình hiện đại. Đặc điểm nổi bật của JSON là cấu trúc dữ liệu đơn giản và dễ đọc, giúp các hệ thống dễ dàng trao đổi thông tin với nhau.

JSON sử dụng hai thành phần cơ bản là key (khóa) và value (giá trị). Trong đó:

  • Key: đại diện cho tên thuộc tính của đối tượng.
  • Value: là giá trị của thuộc tính đó và có thể là các kiểu dữ liệu khác nhau như chuỗi (string), số (number), mảng (array), đối tượng (object), giá trị boolean (true/false) hoặc null.

Dưới đây là một ví dụ đơn giản về JSON:

{
  "name": "Alice",
  "age": 25,
  "email": "alice@example.com",
  "isStudent": true
}

Trong ví dụ trên, chúng ta có bốn cặp key-value:

  • "name" là key, và "Alice" là value (dạng chuỗi).
  • "age" là key, và 25 là value (dạng số).
  • "email" là key, và "alice@example.com" là value (dạng chuỗi).
  • "isStudent" là key, và true là value (dạng boolean).

Ngoài các giá trị cơ bản, JSON còn cho phép key chứa các đối tượng phức tạp hơn, ví dụ:

{
  "person": {
    "name": "Bob",
    "age": 30,
    "address": {
      "city": "San Francisco",
      "zipCode": "94103"
    }
  }
}

Trong ví dụ này, key "person" chứa một đối tượng khác, và đối tượng đó lại chứa các cặp key-value khác như "name", "age", và "address". Key "address" tiếp tục chứa một đối tượng lồng nhau, gồm "city""zipCode". Điều này cho phép JSON dễ dàng biểu diễn các cấu trúc dữ liệu phức tạp.

Các kiểu dữ liệu trong JSON:

  • String: Chuỗi ký tự nằm trong dấu ngoặc kép " ". Ví dụ: "name": "Alice".
  • Number: Giá trị số, có thể là số nguyên hoặc số thực. Ví dụ: "age": 25.
  • Boolean: Chỉ có hai giá trị là true hoặc false. Ví dụ: "isStudent": true.
  • Null: Đại diện cho giá trị rỗng. Ví dụ: "middleName": null.
  • Object: Là một đối tượng JSON khác, được bao bọc trong dấu ngoặc nhọn {}. Ví dụ: "address": {"city": "San Francisco", "zipCode": "94103"}.
  • Array: Là một mảng chứa nhiều giá trị hoặc đối tượng, được bao bọc bởi dấu ngoặc vuông []. Ví dụ: "languages": ["English", "Spanish"].

Ưu điểm của JSON:

  1. Đơn giản và dễ đọc: Cấu trúc của JSON ngắn gọn, dễ dàng đọc hiểu, phù hợp với nhiều ngôn ngữ lập trình.
  2. Tương thích rộng rãi: JSON tương thích với nhiều hệ thống khác nhau, đặc biệt là các ứng dụng web.
  3. Hiệu quả trong việc truyền tải dữ liệu: Nhờ cấu trúc gọn nhẹ, JSON giúp giảm dung lượng khi truyền tải dữ liệu qua mạng.

II. XML (eXtensible Markup Language)

XML cũng là một định dạng dữ liệu phổ biến, thường được sử dụng để lưu trữ và trao đổi dữ liệu giữa các hệ thống. Khác với JSON, XML sử dụng các thẻ (tags) để đánh dấu dữ liệu, tương tự như HTML.

Dưới đây là ví dụ tương đương với ví dụ JSON ở trên, nhưng dưới dạng XML:

<person>
  <name>Alice</name>
  <age>25</age>
  <email>alice@example.com</email>
  <isStudent>true</isStudent>
</person>

Mỗi cặp key-value trong JSON sẽ được chuyển thành một cặp thẻ mở và thẻ đóng trong XML, chẳng hạn như <name>Alice</name>.

XML cũng cho phép tạo ra các cấu trúc dữ liệu phức tạp, ví dụ:

<person>
  <name>Bob</name>
  <age>30</age>
  <address>
    <city>San Francisco</city>
    <zipCode>94103</zipCode>
  </address>
</person>

XML có tính linh hoạt cao và có thể được sử dụng để biểu diễn nhiều loại dữ liệu khác nhau. Tuy nhiên, so với JSON, XML thường dài dòng hơn và khó đọc hơn.

Ưu điểm của XML:

  1. Định dạng có cấu trúc: XML có cấu trúc rõ ràng, dễ dàng mở rộng và phân tích.
  2. Đa nền tảng: XML có thể được sử dụng trên nhiều nền tảng và hệ thống khác nhau, từ web đến các hệ thống phần mềm lớn.
  3. Tính mở rộng cao: XML có thể biểu diễn các cấu trúc dữ liệu phức tạp với khả năng lồng các phần tử bên trong nhau.

III. Định dạng dữ liệu trong HTTP

Trong quá trình trao đổi dữ liệu giữa client (máy khách) và server (máy chủ), định dạng dữ liệu đóng vai trò rất quan trọng. Để xác định định dạng dữ liệu, HTTP sử dụng hai thành phần chính trong header là Content-TypeAccept.

  • Content-Type: Xác định định dạng của dữ liệu mà client gửi lên server trong phần body của request. Nếu client muốn gửi dữ liệu dưới dạng JSON, nó sẽ gửi Content-Type: application/json trong header. Điều này giúp server hiểu rằng dữ liệu mà nó nhận được là JSON và có thể xử lý nó một cách chính xác.
  • Accept: Thông báo cho server biết định dạng dữ liệu mà client có thể chấp nhận khi nhận phản hồi từ server. Ví dụ, nếu client chỉ có thể xử lý JSON, nó sẽ gửi Accept: application/json. Khi đó, server sẽ biết rằng nó cần gửi dữ liệu dưới dạng JSON.

Dưới đây là một ví dụ về request HTTP với hai thành phần này trong header:

POST /api/v1/users HTTP/1.1
Host: example.com
Content-Type: application/json
Accept: application/json

{
  "name": "Alice",
  "email": "alice@example.com"
}

Trong ví dụ này:

  • Content-Type: application/json thông báo rằng dữ liệu trong body là JSON.
  • Accept: application/json yêu cầu server trả về dữ liệu dưới dạng JSON.

Việc sử dụng đúng các định dạng như JSON hay XML giúp đảm bảo quá trình trao đổi dữ liệu giữa client và server diễn ra thuận lợi, tránh được các lỗi không mong muốn do định dạng không khớp.


Kết luận:

Cả JSON và XML đều là những định dạng dữ liệu quan trọng, được sử dụng phổ biến trong trao đổi dữ liệu giữa các hệ thống. Mỗi định dạng đều có ưu và nhược điểm riêng, tuy nhiên JSON thường được ưa chuộng hơn nhờ tính đơn giản và nhẹ nhàng. Việc sử dụng đúng định dạng và cấu trúc dữ liệu phù hợp là yếu tố quan trọng giúp quá trình giao tiếp giữa các hệ thống diễn ra hiệu quả và chính xác.

Tham khảo: https://cdn.zapier.com/storage/learn_ebooks/e06a35cfcf092ec6dd22670383d9fd12.pdf

API Testing – Sơ bộ về protocol (Phần 1)

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *