Mmaiqai.com
⚡ API Testing · Chương 5 · Mục 5.4

Idempotency key & chống trùng request

🎯 Mục tiêu học: hiểu giải pháp thực tế cho vấn đề đã nhắc nhiều lần — POST không idempotent (Mục 2.3), double-submit (Mục 3.1) — bằng 1 cơ chế cụ thể: idempotency key.

Cách hoạt động

Client tự sinh 1 khoá duy nhất (thường là UUID) cho mỗi "ý định giao dịch", gửi kèm request qua header. Server lưu lại khoá này cùng kết quả xử lý — nếu nhận request với khoá đã xử lý trước đó, trả lại đúng kết quả cũ thay vì xử lý lại từ đầu.

POST /v1/orders
Idempotency-Key: 3f29a1c4-88b2-4e11-9c3a-1a2b3c4d5e6f
Body: { "customerId": "CUS1001", "items": [...] }

→ Lần 1: server xử lý bình thường, tạo ORD1003, lưu lại kết quả gắn với key trên
→ Lần 2 (client gửi lại do mất mạng, cùng key): server KHÔNG tạo đơn mới,
  trả lại đúng kết quả ORD1003 đã tạo ở lần 1

Checklist kiểm tra

Cách kiểm tra

Mã TCNội dungKỳ vọng
TC-IDEM-01Gửi 2 request giống hệt nhau kèm cùng 1 Idempotency-KeyChỉ 1 bản ghi được tạo; request thứ 2 trả về đúng kết quả của request đầu tiên (không lỗi, không tạo mới)
TC-IDEM-02Gửi 2 request với body khác nhau nhưng dùng cùng 1 Idempotency-KeyCần xác nhận rule với dev: từ chối do key đã dùng cho request khác, hay vẫn trả kết quả cũ — không được âm thầm xử lý theo body mới
TC-IDEM-03Gửi 2 request khác Idempotency-Key nhưng cùng nội dungTạo 2 bản ghi riêng biệt bình thường — key khác nhau nghĩa là 2 ý định giao dịch khác nhau
TC-IDEM-04Kiểm tra key có thời hạn lưu trữ hợp lý không (vd 24h) trước khi bị dọn dẹpĐủ dài để chống được các trường hợp retry thực tế (mất mạng, timeout), nhưng không lưu vĩnh viễn gây tốn tài nguyên

📌 Ghi nhớ

Idempotency key là giải pháp phía thiết kế API — không phải API nào cũng có sẵn cơ chế này. Nếu phát hiện API quan trọng (thanh toán, tạo đơn) chưa hỗ trợ, đây là rủi ro cần báo lại cho dev, không chỉ đơn thuần là 1 test case fail.

📖 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
Idempotency keyKhoá do client sinh ra để server nhận diện và chặn xử lý trùng request
UUIDUniversally Unique Identifier — chuỗi định danh gần như không bao giờ trùng lặp
DeduplicationLoại bỏ trùng lặp — cơ chế đảm bảo 1 hành động chỉ được thực hiện đúng 1 lần

📎 Nội dung do maiqai.com biên soạn — ví dụ minh hoạ, không thuộc hệ thống thật nào.