API Testing (P1): API, Client–Server và REST API

⏱︎

Read time:

4–6 minutes
Minh hoạ API Testing với client, API, server và database

API Testing là kiểm tra trực tiếp lớp giao tiếp giữa các hệ thống, không cần thao tác qua giao diện. Trong bài mở đầu này, chúng ta tập trung vào API, mô hình client–server, REST API và lý do tester cần kiểm tra lớp API bên dưới giao diện.

Lưu ý
API có nhiều kiểu như REST, SOAP và GraphQL. Trong bài này, các ví dụ tập trung vào REST API vì đây là kiểu phổ biến trong hệ thống web/mobile.

API là gì?

API (Application Programming Interface) là một giao diện cho phép phần mềm này giao tiếp với phần mềm khác theo quy tắc đã thống nhất. Thay vì cần biết hệ thống bên trong xử lý ra sao, bên gọi chỉ cần biết gửi dữ liệu gì, gửi tới đâu và có thể nhận lại kết quả nào.

Ví dụ
Ứng dụng đặt đồ ăn gọi API để lấy danh sách nhà hàng, tạo đơn hàng và kiểm tra trạng thái thanh toán. Ứng dụng không cần truy cập trực tiếp database của nhà hàng hay cổng thanh toán.

Client–server hoạt động như thế nào?

Trong mô hình client–server, client là bên gửi yêu cầu, còn server tiếp nhận, xử lý và trả kết quả. Client có thể là trình duyệt, ứng dụng mobile, một dịch vụ backend hoặc công cụ test API.

  1. Người dùng mở màn hình chi tiết sản phẩm trên ứng dụng.
  2. Ứng dụng gửi request tới API, ví dụ yêu cầu sản phẩm có ID 125.
  3. Server xác thực quyền, đọc dữ liệu và áp dụng business rule.
  4. Server trả response chứa trạng thái và dữ liệu sản phẩm.
  5. Ứng dụng đọc response rồi hiển thị tên, giá và tồn kho lên giao diện.

Một request không nhất thiết chỉ đi qua một server. Backend có thể tiếp tục gọi service kho hàng, thanh toán hoặc vận chuyển rồi tổng hợp kết quả trả về client.

Vai trò của API trong hệ thống web/mobile

  • Kết nối giao diện với backend: web/mobile gửi và nhận dữ liệu mà không truy cập database trực tiếp.
  • Dùng chung nghiệp vụ: web và mobile có thể cùng gọi API đăng nhập, tìm kiếm hoặc đặt hàng.
  • Tích hợp hệ thống: kết nối cổng thanh toán, đơn vị vận chuyển, email, bản đồ hoặc dịch vụ đối tác.
  • Chia nhỏ kiến trúc: các service trao đổi với nhau qua API thay vì phụ thuộc trực tiếp vào code nội bộ.

REST API là gì?

REST (Representational State Transfer) là một kiểu kiến trúc để thiết kế dịch vụ trên web. REST API thường biểu diễn dữ liệu dưới dạng resource, sử dụng HTTP để client thao tác với resource và giữ mỗi request đủ thông tin cần thiết để server xử lý.

Trong thực tế, REST API thường dùng URL để xác định resource, HTTP method để mô tả hành động và JSON để trao đổi dữ liệu.

Mẹo nhớ
Resource là “đối tượng cần thao tác”, URL cho biết “đối tượng nào”, còn HTTP method cho biết “muốn làm gì với đối tượng đó”.

UI Testing và API Testing khác nhau thế nào?

Tiêu chíUI TestingAPI Testing
Điểm kiểm traGiao diện và hành vi người dùng nhìn thấyLớp giao tiếp, business logic và dữ liệu trao đổi
Cách tương tácClick, nhập liệu, cuộn, quan sát màn hìnhGửi request và phân tích response (bằng phần mềm Postman hoặc tương đương)
Tốc độThường chậm hơn và phụ thuộc việc render giao diệnThường nhanh hơn vì bỏ qua lớp UI
Khả năng quan sátThấy luồng nghiệp vụ ở góc nhìn người dùngThấy luồng chạy ngầm bên dưới
Loại lỗi mạnhLayout, nội dung hiển thị, điều hướng, khả dụngValidation, phân quyền, schema, dữ liệu, business rule, lỗi tích hợp

Hai loại test bổ sung cho nhau. API pass không chứng minh giao diện hiển thị đúng; UI pass cũng không chứng minh API xử lý đúng mọi input, quyền truy cập và nhánh nghiệp vụ.

Vì sao API vẫn có thể lỗi dù giao diện hoạt động bình thường?

  • UI che giấu input xấu: dropdown chỉ cho chọn giá trị hợp lệ, nhưng API vẫn chấp nhận giá trị ngoài danh sách khi gọi trực tiếp.
  • UI chỉ đi qua happy path: các trường hợp thiếu field, sai kiểu dữ liệu, request trùng hoặc ID không tồn tại chưa được kiểm tra.
  • Phân quyền sai: giao diện ẩn nút xoá với user thường, nhưng endpoint xoá không kiểm tra role.
  • Dữ liệu trả về thừa: UI không hiển thị password hash hoặc thông tin nội bộ, nhưng API vẫn trả các field nhạy cảm trong response.
  • Client tự bù hoặc dùng cache: giao diện đang hiển thị dữ liệu cũ, tự đặt giá trị mặc định hoặc biến đổi response nên người dùng chưa thấy lỗi.
  • Các client dùng API khác nhau: web vẫn chạy tốt nhưng mobile hoặc hệ thống đối tác lỗi vì dùng field, version hay luồng khác.
Ví dụ
UI giới hạn số lượng mua từ 1 đến 10 nên đặt hàng trên màn hình vẫn đúng. Nhưng nếu gửi trực tiếp quantity: -5 mà API vẫn tạo đơn và tính tổng tiền âm, lỗi nằm ở validation phía server.

Học tiếp