DEV Community

Jidan Fatahillah
Jidan Fatahillah

Posted on

Idempotency untuk Apa?

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?

  1. Koneksi Jelek
    Server bisa lambat. User sering tekan tombol berkali-kali.

  2. Retry Otomatis
    Banyak client (termasuk frontend dan load balancer) akan otomatis ulangi request kalau gagal.

  3. 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
Enter fullscreen mode Exit fullscreen mode

Server akan:

  1. Mengecek apakah Idempotency-Key itu sudah pernah dipakai.
  2. Kalau sudah β†’ balikin response yang sama seperti sebelumnya.
  3. 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, dan response 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)