Kamu lagi bikin backend API, trus tiba-tiba ada bug: user klik tombol "Bayar" dua kali dan... π± mereka ditagih dua kali!
Tenang, kamu cuma butuh satu jurus: idempotency.
π Apa Itu Idempotency?
Idempotency adalah sifat dari suatu operasi yang tidak berubah hasil akhirnya walaupun dilakukan berkali-kali dengan input yang sama.
π Sekarang lo adalah Mahasiswa...
Bayangin dehh lu ngisi KRS (Kartu Rencana Studi). terus klik tombol βAmbil Mata Kuliah Aβ satu kali:
- β Data masuk ke sistem.
Eh, lo panik, koneksi jelek, lo klik lagi...
- β Sistem bilang: βMata kuliah A sudah diambil.β
Hasil akhirnya? Sama. lo tetap ambil 1 kelas.
Inilah idempotent operation.
Sekarang bandingkan dengan contoh yang tidak idempotent.
π¬ Operasi yang Tidak Idempotent
Lo transfer uang lewat aplikasi:
- Tekan tombol "Transfer" sekali: πΈ uang terkirim.
- Tapi karena loading terus, lo pencet lagi...
- πΈ uang terkirim dua kali!
β οΈ Ini operasi tidak idempotent, karena hasil akhirnya berubah setiap kali dijalankan.
π§ͺ HTTP dan Idempotency
HTTP method juga punya karakter idempotency:
Method | Idempotent? | Penjelasan |
---|---|---|
GET | β Ya | Ambil data, tidak ubah apapun. |
PUT | β Ya | Overwrite data, hasil akhirnya sama. |
DELETE | β Ya | Hapus data, kalau dihapus lagi tidak berubah. |
POST | β Tidak | Buat data baru, ulangi = data baru lagi. |
PATCH | β οΈ Kadang | Bergantung implementasinya. |
π‘ Kenapa Kita Butuh Idempotency?
Koneksi Jelek
Server bisa lambat. User sering tekan tombol berkali-kali.Retry Otomatis
Banyak client (termasuk frontend dan load balancer) akan otomatis ulangi request kalau gagal.Keamanan & Kepercayaan
Gak lucu kalau transaksi keuangan malah dua kali keluar uang cuma karena user panik ngeklik lagi.
π‘οΈ Cara Bikin POST Idempotent: Gunakan Idempotency-Key
Untuk method yang secara default tidak idempotent, kayak POST
, kita bisa kasih akal-akalan dengan header unik.
Contoh:
POST /api/payment
Idempotency-Key: 123e4567-e89b-12d3-a456-426614174000
Server akan:
- Mengecek apakah
Idempotency-Key
itu sudah pernah dipakai. - Kalau sudah β balikin response yang sama seperti sebelumnya.
- Kalau belum β proses dan simpan hasilnya berdasarkan key-nya.
π― Jadi walaupun user klik βBayarβ berkali-kali, uang hanya keluar sekali.
Implementasi Dasar Idempotency di Backend
Di sisi server:
- Simpan
idempotency_key
,payload
, danresponse
di database. -
Saat request datang:
- Cari key β kalau ada, balikin response lama.
- Kalau tidak β proses dan simpan.
Contoh tabel:
idempotency_key | user_id | endpoint | response | created_at |
---|---|---|---|---|
abc123 | 101 | /payment |
{ status: "paid" } | 2025-05-07 10:10:10 |
π§° Studi Kasus Nyata
Stripe (pembayaran online)
Stripe adalah contoh emas. Mereka mewajibkan penggunaan Idempotency-Key
untuk semua request penting seperti:
- Membuat pembayaran
- Membuat pelanggan
- Melakukan refund
Baca di sini: Stripe Docs - Idempotency
Gojek / Grab
Kalau lo pencet "Order GoRide" dua kali, aplikasi tetap kirim 1 driver. Mereka pasti pakai idempotency untuk menjaga supaya lo gak disamperin 2 motor.
π§ Kesimpulan
Idempotency penting buat API yang aman dan tidak bikin user panik atau rugi.
Gunakan Idempotency-Key untuk method seperti POST supaya aman dari dobel klik dan retry otomatis.
Pahami sifat HTTP method, jangan asal pilih POST buat semua hal.
π Intinya, bikin API lu kayak orang yang sabar β meski diminta berkali-kali, tetap konsisten, tenang, dan gak panik.
Kalau user lagi ngambek pencet tombol terus, lu tetap bisa jawab: βTenang, ini udah aku proses kok.β π
- Buat sistem kamu lebih bisa di-retry, robust, dan gak bikin drama.
π Referensi
Kalau lu suka artikel ini, jangan lupa share, kasih β€οΈ, dan kalau ada pengalaman menarik seputar API atau idempotency, yuk sharing di komentar!
Top comments (0)