API Testing với Postman (Phần 3) – Định dạng dữ liệu JSON và XML

Như bài 1 đã có giới thiệu, đị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). Hôm nay, mình sẽ nói kỹ hơn về từng loại định dạng.

I. JSON

Ngày nay, JSON được sử dụng nhiều trong Restful API. Nó được xây dựng từ Javascript, ngôn ngữ mà được dùng nhiều, tương thích với cả front-end và back-end của cả web app và web service. JSON là 1 định dạng đơn giản với 2 thành phần: keyvalue
Key thể hiện thuộc tính của Object
Value thể hiện giá trị của từng Key

Ví dụ:

{
  "streetAddress": "21 2nd Street",
  "city": "New York",
  "state": "NY",
  "postalCode": "10021"
}

Trong ví dụ trên, key nằm bên trái, value nằm bên phải.

Có nhiều trường hợp, 1 Key sẽ có Value là 1 dãy key + value. Ví dụ như hình:

Trong hình trên Keyaddress và value của nó là 1 object chứa 4 cặp key-value khác

Note:

  • Key của json luôn là String, nằm trong dấu "" ví dụ: "name"
  • Value của 1 key sẽ là 1 trong 6 loại sau đây:
    • String: cũng nằm trong dấu "". Nếu bạn muốn trong String này có ký tự "" thì bạn phải escapse ký tự đó bằng ký tự \, ví dụ: "name": "nguyen \" văn \" nam"
    • Number: dạng nào cũng được, int hoặc double đều ok. vd: "age": 26
    • Null: ví dụ "address": null
    • Boolean: có 1 trong 2 giá trị: true hoặc false. vd: "isAdmin": false
    • Object: là 1 object json như ở phía trên, nằm trong dấu ngoặc nhọn {}
    • Array: là các object cùng loại, nằm trong dấu ngoặc vuông [], ví dụ "sports": ["football", "badminton", "tennis"]

Các ví dụ:

{
    "firstName": "John",
    "lastName": "doe",
    "age": 26,
    "address": {
        "streetAddress": "naist street",
        "city": "Nara",
        "postalCode": "630-0192"
    },
    "phoneNumbers": [
        {
            "type": "iPhone",
            "number": "0123-4567-8888"
        },
        {
            "type": "home",
            "number": "0123-4567-8910"
        }
    ]
}
{
  "menu": {
    "id": "file",
    "tag": 50,
    "popup": {
      "menuitem": [
        {
          "value": "New",
          "onclick": "CreateNewDoc()"
        },
        {
          "value": "Open",
          "onclick": "OpenDoc()"
        },
        {
          "value": "Close",
          "onclick": "CloseDoc()"
        }
      ]
    }
  }
}

II. XML

Trong JSON dùng { } và [ ] để dánh dấu dữ liệu. XML thì tương tự như HMTL, dùng thẻ để đánh dấu và được gọi là nodes.

Lấy luôn ví dụ ở trên nhưng viết bằng xml, nó sẽ như thế này:

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

Quay lại bài 2, phần header có chức năng lưu những thông tin mà người dùng không biết, trong đó có 1 thành phần xác định format của data: Content-Type

Khi client gửi Content-Type trong header của request, nó đang nói với server rằng dữ liệu trong phần body của request là được định dạng theo kiểu đó. Khi client muốn gửi JSON nó sẽ đặt Content-Type là “application/json”. Khi bắt đầu nhận request, server sẽ check cái Content-Type đầu tiên và như thế nó biết cách đọc dữ liệu trong body. Ngược lại, khi server gửi lại client 1 response, nó cũng gửi lại Content-Type để cho client biết cách đọc body của response.

Đôi khi client chỉ đọc được 1 loại định dạng, ví dụ là JSON mà server lại trả về XML thì client sẽ bị lỗi. Do đó, 1 thành phần khác ở trong header là Accept sẽ giúp client xử lý vấn đề trên bằng cách nói luôn với server loại nó có thể đọc được. Ví dụ : Accept : “application/json” . Chốt lại: dựa vào 2 thành phần Content-Type và Accept, client và server có thể hiểu và làm việc một cách chính xác. Ở những bài sử dụng công cụ, mình sẽ chụp ảnh và minh họa rõ ràng Content-Type và Accept trong Header.

Nguồn: chương 3 của cuốn sách: “An Introduction to APIs” by  Brian Cooksey

5 2 votes
Article Rating
Subscribe
Notify of
guest
23 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback

[…] ← Previous Next → […]

Tester
Tester
7 years ago

Thanks Giang
Bài viết vô cùng dễ hiểu và bổ ích

phạm thu thủy
phạm thu thủy
7 years ago
Reply to  Giang Nguyen

Hi Giang
Cho mình hỏi
Jmeter có thể test được ứng dụng viết trên nền windows ko bạn? Hay chỉ test web thôi?

OanhLê
OanhLê
7 years ago

thanks Giang. Mình đã đọc cả 3 bài hướng dẫn về test API của bạn. Mình thấy rất thích thú. Hy vọng bạn sẽ sớm làm các bài viết sâu hơn về mảng test API này.
thanks bạn nhiều!!!

andy
andy
5 years ago
Reply to  Giang Nguyen

Please send to your address facebook?
Thanks

Thao
Thao
7 years ago

Cảm ơn bài. Hy vọng có thêm các chia sẻ về test API

Thoa
Thoa
6 years ago

Em cảm ơn anh nhiều ạ. Đọc bài của anh em mới rõ được test API là cái gì ^^

Hồ Hằng
Hồ Hằng
6 years ago

fb of bạn là chi zứa

Nguyễn Chung
Nguyễn Chung
6 years ago

Thanks pro. Các bài viết rất sâu và sát. Rất dễ hiểu. Xin cám ơn 😀

Le Dang
Le Dang
5 years ago

Cảm ơn Admin rất nhiều, Bài viết rất dễ hiểu và cô đọng cho những người mới bắt đầu với APi như mình

Thuy
Thuy
5 years ago

Hi bạn,
Client muốn dịnh dạng dữ liệu như thế nào thì sẽ gửi thông tin cho server biết trong content-type hoặc accept trong header.
Mình hiểu vậy đúng ko bạn?

Xuyến
Xuyến
2 years ago

Cảm ơn anh Giang về bài viết dễ hiểu và cực kỳ hữu ích với những đứa như em