Lewati ke konten utama
Didit Raih $7,5 Juta untuk Membangun Infrastruktur Identitas dan Fraud
Didit
Kembali ke blog
Blog · 14 Maret 2026

Kunci Idempoten untuk Integrasi API yang Tangguh (ID)

Pelajari cara kunci idempoten memastikan integrasi API yang andal, mencegah transaksi duplikat, dan menyederhanakan panggilan API yang tangguh dalam panduan pengembang ini.

Oleh DiditDiperbarui
developer-guide-idempotency-keys-api-integration.png

Apa itu Kunci Idempoten? Pengidentifikasi unik yang digunakan untuk memastikan bahwa permintaan API dapat dilakukan berulang kali tanpa mengubah hasil di luar penerapan awal permintaan.

Mengapa Menggunakannya? Mereka mencegah transaksi duplikat yang disebabkan oleh masalah jaringan atau upaya coba lagi, yang sangat penting untuk operasi keuangan, pemrosesan pesanan, dan sinkronisasi data.

Manfaat Utama Peningkatan integritas data, penanganan kesalahan yang disederhanakan, pengalaman pengembang yang lebih baik, dan keandalan sistem yang ditingkatkan.

Implementasi Biasanya dihasilkan oleh klien dan dikirim dalam header HTTP Idempotency-Key, dengan server menyimpan dan memeriksa kunci-kunci ini.

Memahami Idempotensi dalam API

Dalam dunia pengembangan perangkat lunak, terutama ketika berhadapan dengan sistem terdistribusi dan komunikasi jaringan, memastikan bahwa operasi terjadi tepat satu kali adalah tantangan yang signifikan. Gangguan jaringan, batas waktu, atau kesalahan di sisi klien dapat menyebabkan situasi di mana permintaan dikirim, tetapi klien tidak menerima konfirmasi. Dalam skenario seperti itu, klien mungkin mencoba ulang permintaan, yang berpotensi menyebabkan tindakan duplikat yang tidak diinginkan. Di sinilah konsep idempotensi menjadi penting untuk membangun panggilan API yang tangguh dan kuat.

Sebuah operasi dianggap idempoten jika melakukan operasi tersebut berkali-kali memiliki efek yang sama dengan melakukannya sekali. Pikirkan seperti mengklik tombol: jika mengkliknya sekali menyimpan file, mengkliknya sepuluh kali seharusnya tetap menghasilkan hanya satu file yang tersimpan, bukan sepuluh salinan identik. Dalam konteks API, idempotensi sangat penting untuk operasi yang memodifikasi status, seperti membuat sumber daya, memproses pembayaran, atau memperbarui catatan.

Tanpa idempotensi, menangani kegagalan jaringan selama operasi penting menjadi mimpi buruk. Misalnya, jika pengguna melakukan pemesanan dan konfirmasi gagal dikembalikan, haruskah sistem mengasumsikan pesanan telah ditempatkan? Jika mencoba ulang, pengguna mungkin akan dikenakan biaya dua kali atau menerima dua pesanan identik. Hal ini dapat menyebabkan ketidakpuasan pelanggan yang signifikan, biaya operasional, dan kerugian finansial. Menerapkan mekanisme idempotensi, seperti kunci idempoten, memberikan cara standar untuk mengelola risiko-risiko ini.

Peran Kunci Idempoten dalam Integrasi API

Kunci idempoten adalah pola yang umum dan efektif untuk mencapai idempotensi dalam integrasi API. Pada dasarnya, kunci idempoten adalah pengidentifikasi unik yang dihasilkan oleh klien untuk setiap operasi unik yang hanya boleh dieksekusi sekali. Kunci ini kemudian dikirim ke server, biasanya dalam header HTTP (misalnya, Idempotency-Key atau X-Request-ID).

Ketika server menerima permintaan dengan kunci idempoten:

  1. Pertama, ia memeriksa apakah permintaan dengan kunci spesifik tersebut telah diproses sebelumnya.
  2. Jika kunci tersebut baru, server memproses permintaan, menyimpan kunci tersebut bersama dengan respons (atau setidaknya status dan pengidentifikasi yang relevan), dan mengembalikan hasilnya ke klien.
  3. Jika kunci tersebut pernah terlihat sebelumnya, server tidak memproses ulang permintaan tersebut. Sebaliknya, ia hanya mengembalikan respons yang tersimpan yang terkait dengan kunci tersebut.

Mekanisme ini menjamin bahwa bahkan jika klien mencoba ulang permintaan yang sama berkali-kali (karena masalah jaringan, batas waktu, atau pengiriman duplikat yang tidak disengaja), server hanya akan melakukan tindakan yang mendasarinya sekali. Permintaan berikutnya dengan kunci yang sama akan menerima hasil yang sama seperti yang pertama berhasil.

Skenario Contoh: Membuat Profil Pelanggan

Bayangkan sebuah aplikasi klien perlu membuat profil pelanggan baru melalui API Anda. Klien menghasilkan UUID, katakanlah a1b2c3d4-e5f6-7890-1234-567890abcdef, dan mengirimkannya sebagai header Idempotency-Key bersama dengan data pelanggan.


POST /customers HTTP/1.1
Host: api.example.com
Content-Type: application/json
Idempotency-Key: a1b2c3d4-e5f6-7890-1234-567890abcdef

{
  "name": "Jane Doe",
  "email": "jane.doe@example.com"
}

Jika permintaan ini berhasil, server membuat pelanggan dan mengembalikan respons 201 Created dengan ID pelanggan baru. Server juga menyimpan kunci a1b2c3d4-e5f6-7890-1234-567890abcdef dan respons terkaitnya.

Sekarang, jika klien mengalami gangguan jaringan dan tidak menerima respons, klien mungkin mencoba ulang permintaan yang sama persis. Ketika server menerima permintaan kedua dengan Idempotency-Key yang sama, server mengenali kunci tersebut, mengambil respons sebelumnya (misalnya, 201 Created dengan ID pelanggan), dan mengirimkannya kembali tanpa membuat catatan pelanggan duplikat.

Menerapkan Kunci Idempoten: Praktik Terbaik untuk Pengembang

Menerapkan kunci idempoten secara efektif membutuhkan pertimbangan cermat dari perspektif klien dan server. Berikut adalah panduan untuk pengembang:

Implementasi Sisi Klien

  • Hasilkan Kunci Unik: Gunakan pengidentifikasi unik universal (UUID) atau generator acak kuat serupa untuk kunci idempoten Anda. Setiap operasi logis yang berbeda harus memiliki kunci unik.
  • Masa Berlaku Kunci: Kunci idempoten idealnya harus unik per operasi dan memiliki masa berlaku yang wajar. Untuk sebagian besar kasus penggunaan, menghasilkan kunci baru untuk setiap transaksi logis baru sudah cukup. Hindari menggunakan kembali kunci di berbagai jenis operasi.
  • Kirim dalam Header: Selalu kirim kunci idempoten dalam header HTTP khusus (misalnya, Idempotency-Key). Hindari mengirimnya dalam badan permintaan, karena ini dapat menyebabkan masalah jika badan itu sendiri tunduk pada perubahan atau kerusakan.
  • Logika Coba Ulang: Terapkan mekanisme coba ulang untuk kesalahan jaringan sementara (misalnya, kesalahan server 5xx, batas waktu). Yang terpenting, pastikan kunci idempoten yang sama digunakan untuk permintaan yang dicoba ulang.
  • Deduplikasi di Sisi Klien: Meskipun server menangani idempotensi, klien juga dapat memperoleh manfaat dari deduplikasi sisi klien untuk operasi yang diprakarsai oleh tindakan pengguna untuk mencegah pengiriman duplikat yang tidak disengaja sebelum permintaan bahkan mencapai jaringan.

Implementasi Sisi Server

  • Penyimpanan: Anda memerlukan mekanisme untuk menyimpan kunci idempoten yang diproses dan respons yang sesuai. Basis data (SQL atau NoSQL), cache (seperti Redis), atau penyimpanan kunci-nilai khusus dapat digunakan. Penyimpanan harus cepat dan andal.
  • Kedaluwarsa Kunci: Simpan kunci dan respons untuk jangka waktu tertentu. Ini mencegah pertumbuhan penyimpanan yang tidak terbatas. Durasi harus cukup lama untuk mencakup jendela coba ulang klien yang diharapkan, tetapi tidak terlalu lama. Misalnya, 24 jam seringkali sudah cukup.
  • Atomisitas: Proses pemeriksaan kunci yang ada, melakukan operasi (jika baru), dan menyimpan kunci/respons idealnya harus atomik untuk mencegah kondisi balapan di mana dua permintaan identik mungkin diproses secara bersamaan. Transaksi basis data atau mekanisme penguncian dapat membantu di sini.
  • Penanganan Respons: Ketika kunci duplikat terdeteksi, kembalikan respons yang sama persis, termasuk kode status HTTP, header, dan badan, seperti yang dikembalikan untuk permintaan asli.
  • Metode Non-Idempoten: Kunci idempoten terutama untuk metode yang mengubah status seperti POST, PUT, dan PATCH. Permintaan GET secara inheren idempoten. Permintaan DELETE juga biasanya idempoten (menghapus sesuatu berkali-kali memiliki efek yang sama dengan menghapusnya sekali – ia hilang). Namun, menerapkan kunci ke POST adalah kasus penggunaan yang paling umum dan penting untuk mencegah pembuatan duplikat.

Pertimbangan Arsitektur untuk Panggilan API yang Tangguh

Membangun panggilan API yang tangguh melampaui sekadar menerapkan kunci idempoten. Ini melibatkan pendekatan holistik untuk desain sistem:

  • Pemrosesan Asinkron: Untuk operasi yang berjalan lama, pertimbangkan pola asinkron. Panggilan API awal menerima permintaan, menetapkan kunci idempoten, menyimpan pekerjaan, dan segera mengembalikan status 202 Accepted dengan ID pekerjaan. Klien kemudian dapat melakukan polling status pekerjaan atau menerima notifikasi webhook setelah selesai. Ini meningkatkan responsivitas dan menangani waktu pemrosesan yang lebih lama dengan baik.
  • Strategi Penanganan Kesalahan: Tentukan kode dan pesan kesalahan yang jelas. Bedakan antara kesalahan sementara (di mana coba ulang sesuai) dan kesalahan permanen (seperti kegagalan validasi atau permintaan buruk).
  • Pembatasan Tarif dan Throttling: Terapkan langkah-langkah untuk mencegah penyalahgunaan dan memastikan penggunaan yang adil, tetapi pastikan mekanisme ini tidak mengganggu logika coba ulang yang sah berdasarkan kunci idempoten.
  • Pemantauan dan Peringatan: Siapkan pemantauan yang kuat untuk kinerja API, tingkat kesalahan, dan kesehatan penyimpanan kunci idempoten Anda. Peringatan untuk tingkat kesalahan tinggi atau latensi dapat membantu menangkap masalah lebih awal.

Pendekatan Didit untuk Integrasi yang Aman dan Andal

Di Didit, kami memahami pentingnya integrasi API yang aman, andal, dan efisien untuk alur kerja verifikasi identitas dan kepatuhan. Kami telah membangun platform kami dengan prinsip-prinsip ini sebagai intinya, memastikan bahwa interaksi Anda dengan layanan kami kuat dan dapat diprediksi.

API kami dirancang dengan mempertimbangkan idempotensi. Saat Anda memulai permintaan verifikasi melalui API kami, Anda dapat memberikan Idempotency-Key. Ini memastikan bahwa jika kondisi jaringan menyebabkan Anda mencoba ulang permintaan, sistem Didit akan memprosesnya hanya sekali, mencegah biaya duplikat atau tindakan yang tidak disengaja. Hal ini sangat penting untuk transaksi keuangan, proses orientasi, dan operasi apa pun yang memodifikasi status dalam aplikasi Anda yang bergantung pada modul verifikasi identitas kami.

Misalnya, saat Anda memulai proses KYC yang melibatkan beberapa langkah seperti verifikasi dokumen ID, pemeriksaan kelangsungan hidup, dan penyaringan AML, menggunakan kunci idempoten untuk permintaan awal memastikan bahwa seluruh alur kerja dipicu hanya sekali, bahkan jika ada masalah koneksi intermiten selama pengiriman klien.

Selain itu, Didit menyediakan dokumentasi komprehensif dan SDK yang memandu pengembang tentang praktik terbaik untuk mengintegrasikan layanan kami. Kami berfokus pada:

  • Kontrak API yang Jelas: Titik akhir, format permintaan/respons, dan kode kesalahan yang terdefinisi dengan baik.
  • Autentikasi Aman: Memanfaatkan protokol standar seperti OAuth 2.0 untuk akses yang aman.
  • Webhook Real-time: Memberikan notifikasi segera untuk perubahan status verifikasi, mengurangi kebutuhan untuk polling terus-menerus dan meningkatkan efisiensi panggilan API yang tangguh Anda.
  • Alat yang Ramah Pengembang: Menawarkan alat dan contoh yang menyederhanakan proses integrasi API, memungkinkan Anda membangun solusi identitas yang aman dan andal lebih cepat.

Dengan memanfaatkan infrastruktur Didit yang kuat dan mematuhi praktik terbaik seperti menggunakan kunci idempoten, bisnis dapat membangun alur kerja verifikasi identitas yang sangat andal yang melindungi dari kesalahan dan memastikan integritas data.

Pertanyaan yang Sering Diajukan

Apa perbedaan antara idempoten dan atomik?

Atomisitas mengacu pada operasi yang diperlakukan sebagai satu unit kerja yang tidak dapat dibagi. Operasi tersebut entah selesai sepenuhnya atau tidak sama sekali. Idempotensi, di sisi lain, berarti bahwa mengeksekusi operasi berkali-kali menghasilkan hasil yang sama dengan mengeksekusinya sekali. Operasi idempoten tidak harus atomik, dan operasi atomik belum tentu idempoten. Misalnya, membaca data bersifat atomik dan idempoten. Permintaan POST untuk membuat sumber daya dapat dibuat idempoten dengan menggunakan kunci idempoten, tetapi proses pembuatan yang mendasarinya sendiri mungkin melibatkan beberapa langkah atomik.

Berapa lama kunci idempoten harus berlaku?

Masa berlaku kunci idempoten bergantung pada toleransi aplikasi Anda terhadap permintaan duplikat dan keandalan sistem Anda. Praktik umum adalah menyimpan kunci dan responsnya untuk jangka waktu yang mencakup jendela coba ulang maksimum yang diharapkan, biasanya berkisar dari beberapa menit hingga 24 jam. Ini mencegah pertumbuhan penyimpanan yang tidak terbatas sambil memastikan bahwa upaya coba ulang yang sah ditangani dengan benar.

Bisakah saya menggunakan kunci idempoten untuk permintaan GET?

Permintaan GET secara inheren idempoten karena dirancang untuk mengambil data tanpa mengubah status server. Oleh karena itu, mereka tidak memerlukan kunci idempoten. Kunci idempoten terutama digunakan untuk operasi yang memodifikasi status server, seperti permintaan POST, PUT, PATCH, dan terkadang DELETE, untuk mencegah efek samping yang tidak diinginkan dari pengiriman duplikat.

Siap Memulai?

Membangun aplikasi yang andal dan dapat diskalakan membutuhkan fondasi yang kuat untuk menangani interaksi API. Menerapkan kunci idempoten adalah langkah mendasar untuk membuat sistem tangguh yang dapat menahan masalah jaringan dan mencegah kerusakan data.

Jelajahi bagaimana platform identitas komprehensif Didit dapat meningkatkan keamanan dan keandalan aplikasi Anda. API kami dirancang untuk integrasi yang mulus, menawarkan fitur-fitur canggih seperti dukungan idempotensi untuk memastikan alur kerja verifikasi Anda selalu dapat diandalkan.

Infrastruktur untuk identitas dan fraud.

Satu API untuk KYC, KYB, Transaction Monitoring, dan Wallet Screening. Integrasi dalam 5 menit.

Minta AI untuk merangkum halaman ini
Kunci Idempoten: Panduan Integrasi API Tangguh.