memahami konsep idempotency dalam desain api",

memahami konsep idempotency dalam desain api

Memahami Konsep Idempotency dalam Desain API

Pernah nggak sih kamu ngalamin situasi di mana tombol "Submit" di-klik berkali-kali karena loading lama, terus eh malah muncul transaksi duplikat? Nah, ini salah satu masalah yang bisa dihindari kalau API-nya menerapkan konsep idempotency dengan baik.

Idempotency itu simpelnya begini: operasi yang dilakukan berkali-kali hasilnya sama dengan kalau cuma dilakukan sekali. Bayangin kayak tombol lampu yang udah nyala—pencet berkali-kali pun lampunya tetap nyala, nggak jadi makin terang atau malah rusak.

Kenapa Idempotency Penting?

Di dunia API, banyak hal bisa salah. Koneksi internet putus, timeout, atau user yang panik klik tombol berkali-kali. Tanpa idempotency, setiap request bisa bikin efek samping baru: transfer uang jadi double, order produk jadi duplikat, atau data jadi berantakan.

Dengan menerapkan idempotency, kamu bisa bikin sistem yang lebih robust dan predictable. User bisa retry request dengan aman tanpa takut bikin masalah baru.

HTTP Methods dan Idempotency

Beberapa HTTP method secara natural udah idempotent:

  • GET - Cuma baca data, nggak ngubah apa-apa. Dipanggil berkali-kali ya hasilnya sama.
  • PUT - Update resource dengan data lengkap. Kirim data yang sama berkali-kali, hasilnya tetap sama.
  • DELETE - Hapus resource. Hapus yang udah kehapus ya tetap kehapus.
  • POST - Ini yang tricky. Secara default POST nggak idempotent karena biasanya bikin resource baru setiap kali dipanggil.

Cara Implementasi Idempotency di POST

Karena POST sering dipake buat operasi penting kayak payment atau order creation, kita perlu bikin dia idempotent secara manual. Caranya gimana?

Solusi paling umum adalah pakai idempotency key. Client ngirim unique identifier (biasanya UUID) di header request, misalnya Idempotency-Key: abc-123-def. Server nyimpen key ini dan response-nya. Kalau ada request dengan key yang sama lagi, server tinggal return response yang udah disimpen tanpa eksekusi ulang.

Contoh flow-nya:

  • Request pertama dengan key "abc-123" → proses payment, return success
  • Request kedua dengan key yang sama → langsung return success tanpa charge ulang
  • Request ketiga dengan key baru "xyz-789" → proses payment baru

Tips Praktis

Beberapa hal yang perlu diperhatikan saat implementasi:

  • Simpan idempotency key dengan TTL (time to live) yang reasonable, misalnya 24 jam
  • Return status code yang tepat: 200 untuk success, 409 kalau ada conflict
  • Dokumentasikan dengan jelas di API docs bahwa endpoint support idempotency
  • Jangan lupa handle edge case kayak concurrent request dengan key yang sama

Dengan memahami dan menerapkan idempotency dengan benar, API kamu jadi lebih reliable dan user experience jadi jauh lebih baik. Worth it banget buat diimplementasikan!

Next Post Previous Post
No Comment
Add Comment
comment url