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 1Checklist kiểm tra
Cách kiểm tra
| Mã TC | Nội dung | Kỳ vọng |
|---|---|---|
| TC-IDEM-01 | Gửi 2 request giống hệt nhau kèm cùng 1 Idempotency-Key | Chỉ 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-02 | Gửi 2 request với body khác nhau nhưng dùng cùng 1 Idempotency-Key | Cầ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-03 | Gửi 2 request khác Idempotency-Key nhưng cùng nội dung | Tạ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-04 | Kiể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 key | Khoá do client sinh ra để server nhận diện và chặn xử lý trùng request |
| UUID | Universally Unique Identifier — chuỗi định danh gần như không bao giờ trùng lặp |
| Deduplication | Loạ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.