PineLab
API & SQL

API testing là gì? Hướng dẫn kiểm thử API cho tester từ đầu

Giao diện chỉ là lớp vỏ. Phần lớn logic nghiệp vụ — và phần lớn lỗi nghiêm trọng — nằm ở tầng API bên dưới. Tester biết test API phát hiện lỗi sớm hơn, chính xác hơn và ít phụ thuộc vào việc giao diện đã làm xong hay chưa.

11 phút đọc Cập nhật 07/09/2026 PineLab

API là gì và API testing là gì?

API (Application Programming Interface) là giao diện để các phần mềm trao đổi dữ liệu với nhau. Khi bạn bấm "Đăng nhập" trên trình duyệt, giao diện không tự kiểm tra mật khẩu — nó gửi một request tới API của máy chủ, và máy chủ trả về kết quả.

API testing là kiểm thử trực tiếp ở tầng giao tiếp này: gửi request với dữ liệu do bạn kiểm soát và kiểm chứng response trả về có đúng cấu trúc, đúng giá trị, đúng mã trạng thái và đúng quy tắc nghiệp vụ hay không — bỏ qua hoàn toàn lớp giao diện.

Vì sao nên test API

  • Phát hiện lỗi sớm hơn: API thường xong trước giao diện, nên bạn không phải chờ.
  • Chính xác hơn: khi test fail, bạn biết ngay lỗi ở tầng dịch vụ chứ không phải đoán giữa giao diện, mạng và máy chủ.
  • Nhanh và ổn định hơn: một lời gọi API chạy trong mili-giây và không vỡ vì đổi màu nút bấm.
  • Bắt được lớp lỗi mà giao diện che giấu: giao diện có thể chặn nhập dữ liệu xấu, nhưng máy chủ thì sao?

Đọc hiểu một request và response

Trước khi test được API, bạn phải đọc được bốn thành phần của request và ba thành phần của response.

Cấu trúc request

Thành phầnVai tròVí dụ
MethodHành động muốn thực hiệnGET, POST, PUT, PATCH, DELETE
URL / EndpointTài nguyên đíchhttps://api.example.com/v1/orders/1024
HeadersThông tin phụ trợ: xác thực, kiểu dữ liệuAuthorization: Bearer eyJ… — Content-Type: application/json
BodyDữ liệu gửi lên (với POST/PUT/PATCH){ "quantity": 3 }

Cấu trúc response

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 1024,
  "status": "confirmed",
  "quantity": 3,
  "total": 450000,
  "createdAt": "2026-09-07T10:22:31Z"
}

Ba thứ cần kiểm tra ở mỗi response: mã trạng thái (status code), header (đặc biệt là Content-Type và các header bảo mật), và body (cấu trúc, kiểu dữ liệu, giá trị).

Bảng status code tester cần thuộc

Các mã trạng thái HTTP thường gặp khi kiểm thử
Ý nghĩaKhi nào đúng là mã này
200 OKThành côngGET, PUT, PATCH, DELETE hoàn tất bình thường
201 CreatedĐã tạo tài nguyên mớiPOST tạo mới thành công
204 No ContentThành công, không có nội dung trả vềDELETE thành công
400 Bad RequestDữ liệu gửi lên sai định dạng hoặc thiếuThiếu trường bắt buộc, sai kiểu dữ liệu
401 UnauthorizedChưa xác thựcThiếu token, token hết hạn hoặc không hợp lệ
403 ForbiddenĐã xác thực nhưng không có quyềnNgười dùng thường gọi API của quản trị viên
404 Not FoundKhông tìm thấy tài nguyênID không tồn tại
409 ConflictXung đột trạng tháiTạo trùng email đã đăng ký
422 UnprocessableĐúng định dạng nhưng vi phạm quy tắc nghiệp vụNgày kết thúc trước ngày bắt đầu
429 Too Many RequestsVượt giới hạn tần suấtGọi quá nhiều lần trong thời gian ngắn
500 Internal Server ErrorLỗi phía máy chủLuôn luôn là bug — không có ngoại lệ

Checklist thiết kế test case cho một API

1. Đường đi đúng (Happy path)

  • Request hợp lệ trả về đúng status code và đúng dữ liệu.
  • Cấu trúc response đúng như tài liệu đặc tả: đủ trường, đúng kiểu dữ liệu.
  • Dữ liệu thực sự được ghi vào cơ sở dữ liệu — kiểm chứng bằng truy vấn SQL hoặc một API GET.

2. Dữ liệu không hợp lệ

  • Thiếu trường bắt buộc.
  • Sai kiểu dữ liệu: gửi chuỗi vào trường số, gửi số âm vào số lượng.
  • Giá trị biên: 0, số âm, độ dài tối đa, độ dài tối đa cộng một.
  • Body rỗng, body không phải JSON hợp lệ.
  • Trường thừa không có trong đặc tả — API nên bỏ qua hay báo lỗi?
  • Ký tự đặc biệt, emoji, chuỗi Unicode dài, chuỗi có dấu tiếng Việt.

3. Xác thực và phân quyền

  • Gọi API mà không gửi token.
  • Gửi token đã hết hạn, token sai định dạng, token của môi trường khác.
  • Người dùng A truy cập tài nguyên của người dùng B bằng cách đổi ID trên URL.
  • Người dùng thường gọi endpoint dành cho quản trị viên.

4. Trạng thái và nghiệp vụ

  • Gọi hành động không hợp lệ với trạng thái hiện tại: huỷ một đơn đã giao xong.
  • Gửi cùng một request hai lần — có tạo ra hai bản ghi trùng không?
  • Thao tác đồng thời: hai request cùng trừ kho của sản phẩm còn 1 cái.

Công cụ và cách bắt đầu

  • DevTools của trình duyệt — tab Network: miễn phí, luôn có sẵn, là nơi tốt nhất để bắt đầu quan sát request thật do chính ứng dụng gửi đi.
  • Postman hoặc Insomnia: gửi request thủ công, lưu bộ sưu tập, thiết lập biến môi trường.
  • cURL: hữu ích khi cần chia sẻ một lệnh tái hiện lỗi trong bug report.
  • Playwright hoặc REST-assured: tự động hoá kiểm thử API trong pipeline.
# Gửi một request POST kèm token — dạng đưa vào bug report rất tiện
curl -X POST https://api.example.com/v1/orders \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"productId": 88, "quantity": -3}'

# Kỳ vọng: 400 Bad Request kèm thông báo về quantity
# Thực tế:  500 Internal Server Error  <-- bug
HỎI ĐÁP

Câu hỏi thường gặp

Test API có cần biết lập trình không?

Ở mức thủ công bằng Postman thì không cần. Bạn chỉ cần hiểu HTTP, đọc được JSON và biết thiết kế test case. Kỹ năng lập trình trở nên cần thiết khi bạn muốn tự động hoá bộ test API và đưa vào pipeline CI.

Nên test API hay test giao diện trước?

Test API trước khi có thể, vì API thường hoàn thành sớm hơn giao diện và cho phản hồi nhanh, chính xác hơn. Test giao diện vẫn cần thiết cho luồng người dùng đầu cuối, nhưng nên giữ số lượng ít và tập trung vào các luồng quan trọng nhất.

API trả về status code 200 nhưng dữ liệu sai thì tính là lỗi gì?

Đó là lỗi nghiệp vụ và thường nghiêm trọng hơn lỗi mã trạng thái, vì hệ thống báo thành công trong khi kết quả sai. Đây là lý do không được dừng ở việc kiểm tra status code — luôn phải kiểm chứng cả nội dung body và dữ liệu thực tế trong cơ sở dữ liệu.

Contract testing là gì?

Là kiểm thử xem response của API có đúng cấu trúc đã cam kết hay không: đủ trường, đúng kiểu dữ liệu, đúng định dạng. Nó bắt được lớp lỗi rất khó chịu khi một dịch vụ âm thầm đổi tên trường hoặc đổi kiểu dữ liệu và làm hỏng mọi bên đang gọi nó.