API Testing: Cấu trúc của 1 API

⏱︎

Read time:

4–6 minutes
Minh họa cấu trúc API, request và response

Một API request sẽ nhận được 1 response tương ứng. Để đọc tài liệu API hoặc test bằng Postman, tester cần tách rõ từng thành phần của request và response.

Request

Request là toàn bộ thông tin client gửi tới server để yêu cầu thực hiện một hành động.

1. URL và endpoint

URL là địa chỉ đầy đủ được gọi. Endpoint thường được hiểu là sự kết hợp giữa HTTP method và đường dẫn cụ thể.

Thành phầnVí dụ
URL đầy đủhttps://api.elitest.vn/api/articles/xin-chao
Base URLhttps://api.elitest.vn
Path/api/articles/xin-chao
EndpointGET /api/articles/{slug}

2. HTTP method

HTTP method là các phương thức để xem API muốn “đòi hỏi” gì từ server

MethodMục đích thường gặpVí dụ Có cần gửi data theo không
GETLấy dữ liệuGET /api/articlesKhông
POSTTạo mới hoặc thực hiện một hành độngPOST /api/articlesCó
PUTCập nhật resourcePUT /api/articles/bai-viet-so-1Có
PATCHCập nhật một phần resourcePATCH /api/articles/bai-viet-so-1Có
DELETEXoá resourceDELETE /api/articles/bai-viet-so-1Không

3. Path parameter

Path parameter nằm ngay trong đường dẫn và thường dùng để xác định một resource cụ thể.

Ví dụ
GET /api/articles/{slug}
GET /api/articles/xin-chao

Trong ví dụ trên, slug là tên parameter; xin-chao là giá trị thực tế. Nếu slug không tồn tại, server trả 404 Not Found.

4. Query parameter

Query parameter nằm sau dấu ?, thường dùng để lọc, tìm kiếm hoặc phân trang. Nhiều query parameter được nối bằng dấu &.

Ví dụ
GET /api/articles?tag=testing&limit=5&offset=0
ParameterÝ nghĩa
tag=testingChỉ lấy bài có tag testing
limit=5Lấy tối đa 5 bài
offset=0Bắt đầu từ bản ghi đầu tiên

5. Request headers

Headers chứa thông tin bổ sung về request. Chúng không phải dữ liệu nghiệp vụ chính nhưng giúp server biết client đang gửi loại dữ liệu nào và người gọi là ai.

HeaderVí dụÝ nghĩa
AuthorizationBearer <access_token>Gửi token đăng nhập. Token đại diện cho người gửi request đó.
Cú pháp thường là
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Typeapplication/jsonBody đang được gửi dưới dạng JSON. Là kiểu phổ biến nhất. Ngoài ra có thể gửi dạng form hoặc file…
Acceptapplication/jsonClient mong muốn nhận JSON
User-AgentMyAppClient/1.0.0Thông tin về
Ví dụ
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json
Accept: application/json
User-Agent: MyAppClient/1.0.0

6. Request body

Request body chứa dữ liệu client gửi lên. Không phải request nào cũng có body; GET thường không cần body, còn POST và PUT phải có.

Ví dụ
tạo một bài viết bằng POST /api/articles với body dạng JSON:

{
"article": {
"title": "Học API Testing",
"description": "Bài viết thực hành",
"body": "Nội dung bài viết",
"tagList": ["api", "testing"]
}
}

Trong body ở bên trên, chúng ta sẽ thấy đầy đủ các thông tin cần có để tạo ra 1 bài viết hoàn chỉnh

7. Authorization

Authorization là bước server kiểm tra người dùng đã đăng nhập và có được phép thực hiện hành động hay không. Nó liên quan đến header Authorization, nhưng hai khái niệm không hoàn toàn giống nhau:

  • Header là nơi client gửi token.
  • Authorization là quá trình server dùng danh tính và quyền của người dùng để cho phép hoặc từ chối hành động.
Ví dụ
GET /api/articles có thể được gọi khi chưa đăng nhập.
Nhưng POST /api/articles cần token hợp lệ; người dùng cũng không được sửa hoặc xoá bài của người khác.

Response

Response là toàn bộ kết quả server trả về sau khi xử lý request.

1. Status code

Status code cho biết kết quả tổng quát của request. Khi test, đừng chỉ kiểm tra “có trả về JSON hay không”; hãy kiểm tra cả mã trạng thái có đúng với tình huống hay không.

StatusÝ nghĩa dễ hiểuVí dụ
200 OKRequest thành công và có kết quả trả vềGET /api/articles
201 CreatedTạo resource thành côngPOST /api/articles
204 No ContentThành công nhưng không có response bodyDELETE /api/articles/{slug}
401 UnauthorizedChưa đăng nhập, thiếu token hoặc token không hợp lệGọi GET /api/user mà không gửi token
403 ForbiddenĐã xác định được người dùng nhưng người đó không có quyềnNgười dùng cố sửa hoặc xoá bài viết của người khác
404 Not FoundKhông tìm thấy resourceGET /api/articles/slug-khong-ton-tai
422 Unprocessable ContentRequest đúng cú pháp HTTP nhưng dữ liệu không hợp lệGET /api/articles?limit=0, trong khi limit phải từ 1 trở lên
400 Bad RequestRequest sai hoặc server không thể hiểu requestKhái niệm phổ biến; các lỗi validation của Playground hiện chủ yếu dùng 422
Mẹo nhớ
401: “Bạn là ai?” – server chưa xác thực được người dùng.
403: “Tôi biết bạn là ai, nhưng bạn không được làm việc này.”

2. Response body

Response body chứa dữ liệu hoặc thông báo lỗi mà server trả về.

Ví dụ
Ví dụ khi gọi GET /api/articles?limit=1&offset=0 [200 SUCCEED]
{
"articles": [
{
"slug": "xin-chao",
"title": "Xin chào",
"favorited": false,
"favoritesCount": 0
}
],
"articlesCount": 11
}
Ví dụ
Ví dụ body khi request không hợp lệ:
{
"errors": {
"limit": ["Input should be greater than or equal to 1"]
}
}

3. Response time

Response time là thời gian từ lúc client gửi request đến khi nhận đủ response. Postman hiển thị giá trị này theo millisecond, chẳng hạn 180 ms. Con số có thể thay đổi giữa các lần gọi do mạng, tải server, database và lượng dữ liệu trả về.

Mẹo nhớ
Không nên kết luận API chậm chỉ từ một lần gọi. Hãy chạy nhiều lần trong điều kiện tương đương, theo dõi giá trị trung bình và so sánh với yêu cầu hiệu năng của dự án.

Ghép lại thành một request hoàn chỉnh

PUT https://api.elitest.vn/api/articles/hoc-api-testing
Authorization: Token <access_token>
Content-Type: application/json
Accept: application/json

{
  "article": {
    "description": "Nội dung đã được cập nhật"
  }
}

Trong request này:

  • PUT là method;
  • URL xác định API cần gọi;
  • hoc-api-testing là path parameter;
  • headers mô tả token và định dạng dữ liệu;
  • article là request body.
  • Server sẽ trả status code, response headers, response body và response time.

Xem thêm: API Testing (P1): API, Client–Server và REST API và API Testing: JSON và cách làm việc với nó.