Ngữ nghĩa HTTP Method: Idempotent, Safe, Side-effect
🎯 Mục tiêu học: hiểu 3 khái niệm nền quyết định cách test một API — Safe (an toàn), Idempotent (bất biến khi lặp) và Side-effect (tác dụng phụ ngoài ý muốn) — trước khi liệt kê bất kỳ test case cụ thể nào.
💡 Ý cốt lõi: HTTP method không đơn thuần là "cách gọi API" — mỗi loại mang một cam kết riêng theo chuẩn REST. Test đúng theo cam kết này giúp phát hiện đúng loại lỗi thường gặp trong thực tế, thay vì chỉ dừng ở "API có chạy không".
5 loại HTTP Method và cam kết ngữ nghĩa
| Method | Safe? (không đổi dữ liệu) | Idempotent? (gọi nhiều lần = 1 lần) | Thường có body? |
|---|---|---|---|
| GET | Có | Có | Không |
| POST | Không | Không | Có |
| PUT | Không | Có | Có |
| PATCH | Không | Không (theo chuẩn) | Có |
| DELETE | Không | Có | Tuỳ hệ thống |
Khung 7 nhóm kịch bản — dùng để tự suy ra checklist đầy đủ cho bất kỳ API nào
Thay vì nhớ từng ví dụ test case rời rạc, hãy nhớ 7 nhóm kịch bản dưới đây — với bất kỳ API nào (không riêng ví dụ trong bài), lần lượt đi qua từng nhóm sẽ giúp checklist bao phủ đầy đủ thay vì bỏ sót theo cảm tính. 4 mục tiếp theo (2.2–2.5) đều tổ chức checklist theo đúng 7 nhóm này.
| # | Nhóm kịch bản | Câu hỏi cần tự đặt ra |
|---|---|---|
| 1 | Happy path | Với dữ liệu hợp lệ, đúng luồng, kết quả có đúng như mong đợi không? |
| 2 | Dữ liệu bắt buộc | Field/tham số bắt buộc mà thiếu, rỗng, hoặc null thì sao? |
| 3 | Định dạng & kiểu dữ liệu | Sai kiểu (số thay chuỗi...), sai định dạng, vượt biên độ dài thì sao? |
| 4 | Quy tắc nghiệp vụ & dữ liệu tham chiếu | Tham chiếu tới dữ liệu không tồn tại, hoặc vi phạm ràng buộc nghiệp vụ thì sao? |
| 5 | Đặc thù ngữ nghĩa của method đó | Có đúng safe/idempotent như cam kết ở bảng trên không? (xem riêng từng method) |
| 6 | Bảo mật & phân quyền | Có truy cập/thao tác được dữ liệu của người khác không? Có injection được không? |
| 7 | Response contract | Status code, header, cấu trúc body trả về có đúng chuẩn đã thống nhất không? |
📌 Ghi nhớ
Safe = gọi không làm thay đổi dữ liệu (chỉ GET/HEAD)
Idempotent = gọi nhiều lần cho cùng 1 kết quả cuối (GET, PUT, DELETE — không gồm POST)
Với tester: trước khi test bất kỳ API nào, xác định đúng method và đối chiếu hành vi thật của hệ thống với bảng trên — nếu lệch, đó tự thân đã là một phát hiện đáng báo lại cho dev.
📖 Thuật ngữ Anh–Việt (mục này)
Đề thi dùng thuật ngữ tiếng Anh — nhớ đúng cụm bên trái. Bấm 🔊 để nghe từng từ, hoặc "Đọc tất cả" để nghe lần lượt Anh → (vài giây) → Việt.
| Thuật ngữ (EN) | Nghĩa & ghi nhớ nhanh |
|---|---|
| Safe method | Phương thức an toàn — không gây thay đổi dữ liệu phía server |
| Idempotent | Bất biến khi lặp — gọi nhiều lần cho cùng 1 kết quả cuối |
| Side-effect | Tác dụng phụ — thay đổi ngoài ý muốn xảy ra khi gọi API |
| Resource | Tài nguyên — đối tượng dữ liệu mà API thao tác lên (vd 1 đơn hàng) |
| REST | Representational State Transfer — kiểu kiến trúc API phổ biến dựa trên HTTP method |
📎 Nội dung do maiqai.com biên soạn dựa trên nguyên tắc REST phổ biến (tham khảo tinh thần RFC 7231/RFC 9110) và kinh nghiệm test API thực tế — không phải chương trình chứng chỉ chính thức.