Dalam ilmu komputer, idempotensi adalah properti operasi yang jika diterapkan beberapa kali akan menghasilkan efek akhir yang sama seperti jika diterapkan sekali saja. Jika Anda mengirimkan permintaan yang sama ke server lima kali, sistem idempoten memastikan bahwa hasil di server tidak berubah setelah upaya pertama berhasil.
Selain memastikan hasil yang sama, karakteristik utama operasi idempoten adalah tidak menghasilkan efek samping dengan panggilan tambahan. Hal ini merupakan persyaratan inti untuk membangun sistem terdistribusi yang tangguh, di mana pemadaman jaringan atau waktu tunggu yang terputus-putus dapat menyebabkan klien mengirim pesan yang sama lebih dari satu kali.
Analogi: Bayangkan tombol "naik" di lift. Jika menekannya sekali, elevator akan dipanggil ke lantai Anda. Jika Anda menekan tombol itu sepuluh kali lagi sambil menunggu, hasilnya tetap sama—satu lift tetap akan datang ke lantai Anda. Menekan tombol beberapa kali tidak akan memanggil sepuluh lift terpisah. Sebaliknya, menambahkan item ke keranjang belanja digital biasanya tidak idempoten. Jika Anda mengklik tombol "Tambahkan ke Keranjang" lima kali, kemungkinan Anda akan mendapatkan lima item tersebut di keranjang.
Coba lagi permintaan dengan aman setelah waktu habis atau koneksi terputus tanpa takut menduplikasi tindakan (seperti menagih kartu kredit dua kali).
Pengguna tidak memerlukan pelacakan status yang kompleks untuk mengetahui apakah permintaan sebelumnya berhasil atau tidak; mereka cukup "mencoba lagi hingga berhasil".
Sistem terdistribusi dapat pulih dari error dengan memutar ulang log atau mengirim ulang pesan yang terlewat tanpa merusak data.
Standar REST menentukan cara berbagai jenis permintaan web harus berperilaku. Beberapa metode HTTP secara alami "aman" atau idempoten berdasarkan desainnya, yang berarti spesifikasi mengharapkan metode tersebut berperilaku secara terprediksi meskipun diulang. Yang lain dirancang untuk membuat data baru dan memerlukan perhatian ekstra agar aman untuk dicoba lagi.
Menurut RFC 9110, beberapa metode standar secara inheren bersifat idempoten. Pengulangan tindakan ini tidak boleh mengubah status server di luar permintaan awal.
Beberapa metode tidak bersifat idempoten karena tugas utamanya adalah mengubah data dengan cara membuat sesuatu yang baru atau memodifikasi sebagian dari kumpulan data yang ada.
Idempotensi sering kali diperlukan dalam sistem yang kita bangun. Dalam beberapa kasus, hal ini ditangani untuk kita. Dalam kasus lain, kita sebagai developer perlu mengambil tindakan untuk mewujudkannya.
Contoh paling terkenal adalah masalah "tagihan ganda". Jika browser pengguna hang saat mereka membayar penerbangan, mereka mungkin akan mengklik "Bayar" lagi. API pembayaran yang menggunakan kunci idempotensi memastikan bahwa klik kedua dikenali sebagai percobaan ulang. Hal ini melindungi rekening bank pelanggan dan mengurangi biaya operasional penanganan pengembalian dana untuk transaksi duplikat.
Alat seperti Terraform dan Ansible mengandalkan idempotensi. Saat Anda menjalankan skrip untuk "membuat bucket penyimpanan 10 GB", alat ini akan memeriksa status cloud Anda saat ini.
API web modern sering kali mengimplementasikan header Kunci Indempotensi (kini merupakan draf IETF yang terstandardisasi) untuk memungkinkan developer membangun integrasi yang lebih tangguh.
"Upsert" (update atau insert) adalah operasi database klasik yang bersifat idempoten. Alih-alih "Insert" yang sederhana, upsert berarti: "Jika kumpulan data ini ada, lakukan update; jika tidak, buatlah."
Google Cloud menyediakan beberapa alat yang memudahkan developer mengimplementasikan pola ini. Membangun platform terkelola mengurangi jumlah kode "boilerplate" yang perlu Anda tulis untuk menjaga keamanan data Anda.


Pelajari cara men-deploy layanan yang tangguh dan idempoten di Cloud Run sekarang.