Halo Sobat IT!

Dalam pengembangan sistem modern, khususnya yang melibatkan transaksi seperti pembayaran atau pemesanan, ada satu masalah yang sering terjadi tetapi jarang disadari: request yang sama dikirim lebih dari satu kali. Bayangkan kamu melakukan pembayaran, lalu karena jaringan lambat kamu menekan tombol “Bayar” dua kali. Tanpa mekanisme yang tepat, sistem bisa saja memproses kedua request tersebut dan hasilnya? Pembayaran ganda.

Di sinilah konsep idempotency menjadi sangat penting.

Apa Itu Idempotency?

Idempotency adalah sifat dari sebuah operasi di mana hasilnya akan tetap sama meskipun dijalankan berkali-kali.

Dalam konteks API:
Request yang sama, jika dikirim berulang, tidak boleh menghasilkan efek yang berbeda.

Contoh sederhana:

  • Menghapus data → dilakukan sekali atau dua kali, hasilnya tetap: data hilang
  • Mengupdate nilai ke angka tertentu → hasilnya tetap sama

Namun:

  • Menambah saldo → jika dilakukan dua kali, hasilnya berbeda 

Mengapa Idempotency Itu Penting?

  1. Mencegah Duplikasi Transaksi
    Tanpa idempotency:
    1. pembayaran bisa terjadi dua kali
    2. pesanan bisa tercatat dua kali
    3. data menjadi tidak konsisten
      Ini sangat berbahaya, terutama di sistem finansial.
  2. Mengatasi Retry Otomatis
    Dalam sistem modern, sering ada mekanisme retry:
    1. jika request gagal, sistem akan mencoba lagi
      Masalahnya:
      Bagaimana jika request pertama sebenarnya berhasil, tapi responsnya tidak sampai?
      Tanpa idempotency:
      1. request kedua akan dianggap baru
      2. hasilnya menjadi duplikasi
  3. Menjaga Konsistensi Data
    Idempotency membantu memastikan bahwa sistem tetap:
    1. konsisten
    2. dapat diprediksi
    3. aman terhadap error jaringan

Contoh Kasus Nyata

Misalnya API pembayaran:

  • POST /pay
  • {
  •   "user_id": 1,
  •   "amount": 100000
  • }

Jika request ini dikirim dua kali:

  • tanpa idempotency â†’ saldo terpotong dua kali
  • dengan idempotency â†’ hanya diproses sekali

Cara Kerja Idempotency

Biasanya, idempotency diimplementasikan menggunakan Idempotency Key.

Idempotency Key

Setiap request memiliki key unik, misalnya:

  • Idempotency-Key: abc123

Server akan:

  1. Mengecek apakah key sudah pernah digunakan
  2. Jika belum → proses request
  3. Jika sudah → kembalikan hasil sebelumnya

HTTP Method dan Idempotency

Dalam standar HTTP:

Idempotent

  • GET
  • PUT
  • DELETE

Tidak Idempotent

  • POST (default-nya tidak idempotent)

Namun, POST bisa dibuat idempotent dengan teknik seperti idempotency key.

Tantangan dalam Implementasi

  1. Penyimpanan Key
    1. perlu database atau cache
    2. harus efisien
  2. Expiration
    1. key tidak bisa disimpan selamanya
    2. perlu waktu kadaluarsa
  3. Skalabilitas
    1. di sistem distributed, sinkronisasi menjadi tantangan

Penutup

Kesalahan kecil seperti request ganda bisa berdampak besar jika tidak ditangani dengan benar. Idempotency hadir sebagai solusi sederhana namun krusial untuk menjaga sistem tetap konsisten dan aman. Di dunia sistem terdistribusi, satu prinsip penting yang harus diingat: Bukan hanya tentang request yang berhasil, tetapi bagaimana sistem menangani request yang sama.