Sebuah operasi disebut idempoten bila menjalankannya dua kali meninggalkan dunia seperti setelah dijalankan sekali. Menghapus berkas itu idempoten. Mengirim pesan tidak, dan di ketimpangan itulah tinggal sebagian besar kerusakan pesan ganda.
Di mana ia benar-benar dibutuhkan
- Di penanganan webhook, karena pengiriman sekurang-kurangnya sekali dan pengulangan itu lumrah.
- Di apa pun yang Anda ulang setelah waktu tunggu habis, karena waktu tunggu yang habis tidak memberi tahu apakah penulisannya mendarat.
- Di apa pun yang bisa dikirim ulang oleh antrean, yang berarti setiap antrean.
Cara mendapatkannya dengan murah
Simpan tabel berisi id yang sudah Anda tindak, dan sisipkan ke sana dengan kekangan keunikan sebelum Anda mengerjakan pekerjaannya. Kalau penyisipannya gagal, berarti sudah ada yang menanganinya. Itu seluruh tekniknya; tidak butuh pustaka apa pun dan ia selamat dari mulai ulang di tengah jalan, yang tidak dilewati versi di memori.
Sisipkan sebelum, bukan sesudah. Menyisipkan sesudah meninggalkan jendela antara melakukan hal itu dan mencatat bahwa Anda melakukannya, dan tumbang di jendela itu justru kasus yang hendak ditutup oleh tabel tadi.
Apa yang dipakai sebagai id
Apa pun yang pengirim sebut sebagai peristiwanya, kalau ia memberi nama. Kalau tidak, bangun kunci dari bidang-bidang yang membuat peristiwa itu menjadi peristiwa tersebut — akun, percakapan, dan pesannya, misalnya — lalu hash. Kunci yang diturunkan dari cap waktu bukanlah kunci: pengulangannya punya yang lain.
Idempotensi bukan penyaringan ganda di antarmuka. Begitu salinan ganda sampai ke layar, pesan kedua sudah Anda kirim. Pemeriksaannya ada di paling atas penanganan, sebelum apa pun keluar.
Pertanyaan yang sering diajukan
Apakah agen AI membuat duplikat lebih mungkin terjadi?
Bisa. Agen AI yang diminta dua kali mungkin mengirim dua kali, dan agen yang mencoba lagi setelah waktu habis mungkin tidak tahu bahwa percobaan pertama berhasil. Beri ia aturan dalam instruksinya — baca ulang percakapan sebelum mengirim lagi — dan biarkan seseorang tetap menyetujui pengiriman.
Apakah tombol “Terapkan” di ruang proyek bersifat idempoten?
Sebuah usulan di ruang hanya berjalan sekali. Menekan “Terapkan” untuk kedua kalinya tidak mengubah apa-apa.