Idempotency (Tính bất biến)
Thực hiện cùng một yêu cầu nhiều lần cho kết quả như chỉ thực hiện một lần. Rất quan trọng trong API và hệ phân tán để xử lý an toàn các yêu cầu trùng lặp do lỗi mạng hoặc retry.
Ví dụ: gửi lệnh trừ 100k từ tài khoản nhiều lần, hệ thống idempotent chỉ trừ một lần duy nhất → tránh double-charge, tránh tạo đơn hàng lặp.
Idempotency trong REST
- GET, PUT, DELETE thường idempotent - gọi nhiều lần không đổi kết quả cuối.
- POST, PATCH mặc định không idempotent - gọi nhiều lần tạo nhiều bản ghi hoặc thay đổi tích lũy.
Khắc phục: gắn idempotency key (token duy nhất) cho yêu cầu → khi retry, hệ thống nhận ra và chỉ thực hiện một lần.
Khi nào cần
Áp dụng cho mọi API có khả năng retry hoặc gửi trùng lặp, đặc biệt các API tạo giao dịch (chuyển tiền, đặt đơn). Nếu luồng xử lý có thể thất bại và client retry → thiết kế idempotency key.
Liên quan
- REST - GET/PUT/DELETE idempotent, POST thì không
- Message Queue - consumer cần idempotent phòng message trùng
- Pessimistic vs Optimistic Locking - cùng nhóm xử lý an toàn concurrency