Menguasai Logika Coba Lagi & Pemutus Sirkuit untuk Integrasi IDV yang Tangguh (ID)
Pastikan integrasi API verifikasi identitas (IDV) Anda tangguh dan andal dengan menerapkan logika coba lagi (retry logic) dan pemutus sirkuit (circuit breaker) yang kuat untuk mengatasi kegagalan sementara dan mencegah masalah.

Optimalkan Keandalan Terapkan logika coba lagi dan pemutus sirkuit untuk menangani kegagalan API sementara dengan baik, memastikan waktu aktif yang lebih tinggi untuk layanan verifikasi identitas Anda.
Cegah Kegagalan Berjenjang Pemutus sirkuit mengisolasi layanan yang gagal, melindungi aplikasi Anda agar tidak kewalahan oleh upaya coba lagi ke API IDV yang tidak responsif.
Tingkatkan Pengalaman Pengguna Kurangi friksi dan tingkatkan tingkat konversi dengan secara otomatis memulihkan diri dari masalah sementara tanpa memerlukan intervensi manual dari pengguna.
Desain untuk Ketahanan Integrasikan pola-pola ini sejak awal integrasi API verifikasi identitas Anda untuk membangun sistem yang benar-benar toleran terhadap kesalahan.
Dalam dunia verifikasi identitas (IDV) daring, integrasi API yang mulus dan andal adalah yang terpenting. Setiap hambatan dalam proses verifikasi dapat menyebabkan frustrasi pengguna, pendaftaran yang ditinggalkan, dan kehilangan pendapatan. Sebagai pengembang, kami memahami bahwa API eksternal, sekokoh apa pun, dapat mengalami masalah sementara seperti batas waktu jaringan, ketidaktersediaan layanan sementara, atau pembatasan laju. Di sinilah penguasaan logika coba lagi (retry logic) dan pemutus sirkuit (circuit breakers) menjadi penting untuk membangun integrasi API verifikasi identitas yang benar-benar toleran terhadap kesalahan dan tangguh.
Memahami Kegagalan Sementara dalam Integrasi API IDV
Kegagalan sementara adalah kesalahan sementara yang dapat memperbaiki diri sendiri dan biasanya teratasi dalam waktu singkat. Untuk API IDV, ini dapat bermanifestasi sebagai:
- Gangguan jaringan: Interupsi singkat dalam konektivitas antara layanan Anda dan penyedia IDV.
- Beban layanan berlebih: API IDV sementara melebihi kapasitasnya karena lalu lintas tinggi.
- Pembatasan laju: Aplikasi Anda melebihi jumlah permintaan API yang diizinkan dalam jangka waktu tertentu, menghasilkan kode status HTTP 429.
- Masalah basis data sementara: Backend penyedia IDV mengalami pemadaman singkat.
Mengabaikan kegagalan sementara ini dapat menyebabkan status kesalahan yang tidak perlu bagi pengguna dan pemborosan sumber daya karena aplikasi Anda mencoba memproses permintaan yang gagal berulang kali. Menerapkan logika coba lagi yang tepat adalah garis pertahanan pertama terhadap masalah tersebut, secara signifikan meningkatkan keandalan integrasi API.
Menerapkan Logika Coba Lagi yang Efektif untuk API IDV
Logika coba lagi adalah pola desain yang secara otomatis mencoba kembali operasi setelah kegagalan sementara. Namun, tidak semua upaya coba lagi diciptakan sama. Strategi coba lagi yang cerdas sangat penting:
1. Mundur Eksponensial (Exponential Backoff)
Alih-alih segera mencoba kembali permintaan yang gagal, mundur eksponensial melibatkan menunggu waktu yang semakin meningkat di antara upaya coba lagi. Ini mencegah membanjiri layanan yang sedang berjuang dan memberinya waktu untuk pulih. Misalnya:
- Upaya coba lagi pertama: Tunggu 1 detik
- Upaya coba lagi kedua: Tunggu 2 detik
- Upaya coba lagi ketiga: Tunggu 4 detik
- Upaya coba lagi keempat: Tunggu 8 detik
Anda juga harus menambahkan sedikit 'jitter' acak pada interval mundur untuk mencegah masalah 'thundering herd', di mana beberapa klien mencoba kembali pada saat yang bersamaan. Sebagian besar pustaka klien HTTP modern menawarkan dukungan bawaan untuk mundur eksponensial.
2. Membatasi Upaya Coba Lagi dan Menentukan Batas Maksimum Percobaan
Ada titik di mana upaya coba lagi yang berkelanjutan menjadi sia-sia. Tetapkan jumlah maksimum percobaan coba lagi (misalnya, 3-5 kali). Jika semua upaya coba lagi gagal, operasi harus ditingkatkan, mungkin dengan mencatat kesalahan, memberi tahu administrator, atau mengembalikan kesalahan definitif kepada pengguna.
3. Idempotensi
Pastikan panggilan API IDV Anda bersifat idempoten jika memungkinkan. Ini berarti bahwa membuat permintaan yang sama beberapa kali memiliki efek yang sama dengan membuatnya sekali. Misalnya, membuat sesi verifikasi seharusnya hanya membuat satu sesi, meskipun permintaannya dicoba lagi. Jika suatu operasi tidak idempoten, pertimbangkan bagaimana upaya coba lagi dapat memengaruhi konsistensi data.
4. Upaya Coba Lagi Selektif
Hanya coba lagi pada kode kesalahan sementara tertentu yang diketahui (misalnya, HTTP 429 Terlalu Banyak Permintaan, HTTP 500 Kesalahan Server Internal, HTTP 503 Layanan Tidak Tersedia, batas waktu jaringan). Jangan coba lagi pada kesalahan sisi klien (misalnya, HTTP 400 Permintaan Buruk, HTTP 401 Tidak Sah) karena ini menunjukkan masalah dengan permintaan itu sendiri, bukan masalah layanan sementara.
import requests
import time
from requests.exceptions import RequestException
def call_didit_idv_api(data, max_retries=5):
retries = 0
while retries < max_retries:
try:
response = requests.post("https://api.didit.me/v1/verify", json=data, timeout=5)
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
return response.json()
except RequestException as e:
# Only retry on network errors or specific server errors
if isinstance(e, requests.exceptions.ReadTimeout) or \
(response is not None and response.status_code in [429, 500, 502, 503, 504]):
retries += 1
wait_time = 2 ** retries # Exponential backoff
print(f"IDV API call failed: {e}. Retrying in {wait_time} seconds...")
time.sleep(wait_time)
else:
print(f"Non-retryable error: {e}. Aborting.")
raise
raise Exception(f"IDV API call failed after {max_retries} retries.")
# Contoh Penggunaan
try:
result = call_didit_idv_api({"user_id": "123", "document_type": "passport"})
print(f"Verifikasi berhasil: {result}")
except Exception as e:
print(f"Verifikasi akhirnya gagal: {e}")
Melindungi Sistem Anda dengan Pemutus Sirkuit
Meskipun logika coba lagi menangani kegagalan sementara, apa yang terjadi jika API IDV mengalami pemadaman yang berkepanjangan? Terus-menerus mencoba lagi terhadap layanan yang sama sekali tidak responsif dapat menyebabkan:
- Kelelahan sumber daya: Thread atau proses aplikasi Anda terikat menunggu batas waktu.
- Kegagalan berjenjang: Upaya coba lagi itu sendiri dapat berkontribusi pada masalah layanan hulu, atau menyebarkan kegagalan di seluruh sistem Anda sendiri.
- Kinerja yang menurun: Aplikasi Anda menjadi lambat dan tidak responsif.
Di sinilah pola pemutus sirkuit (circuit breaker) berperan. Terinspirasi oleh pemutus sirkuit listrik, ini mencegah aplikasi berulang kali memanggil layanan yang kemungkinan akan gagal. Ini meningkatkan toleransi kesalahan dengan mendeteksi kegagalan dan mengarahkan permintaan menjauh dari layanan yang gagal.
Cara Kerja Pemutus Sirkuit:
- Status Tertutup (Closed State): Permintaan dikirim ke API IDV seperti biasa. Jika kegagalan melebihi ambang batas tertentu (misalnya, 5 kegagalan dalam 10 detik), sirkuit beralih ke status Terbuka.
- Status Terbuka (Open State): Semua permintaan berikutnya ke API IDV segera gagal tanpa mencoba memanggil layanan. Setelah batas waktu yang dapat dikonfigurasi (misalnya, 30 detik), ia beralih ke status Setengah Terbuka.
- Status Setengah Terbuka (Half-Open State): Sejumlah terbatas permintaan uji diizinkan melalui ke API IDV. Jika permintaan ini berhasil, sirkuit akan tertutup. Jika gagal, ia kembali ke status Terbuka untuk periode batas waktu lainnya.
Menerapkan pemutus sirkuit untuk integrasi API verifikasi identitas Anda dapat dilakukan menggunakan pustaka seperti Hystrix (Java), Polly (.NET), atau Tenacity (Python).
from tenacity import retry, wait_exponential, stop_after_attempt, retry_if_exception_type
from requests.exceptions import RequestException
# Konfigurasi tenacity untuk logika coba lagi dengan mundur eksponensial
@retry(
wait=wait_exponential(multiplier=1, min=4, max=10),
stop=stop_after_attempt(5),
retry=retry_if_exception_type(RequestException) # Coba lagi pada kesalahan jaringan
)
def call_didit_api_with_retry(data):
response = requests.post("https://api.didit.me/v1/verify", json=data, timeout=5)
response.raise_for_status()
return response.json()
# Untuk pemutus sirkuit, Anda biasanya akan menggunakan pustaka khusus atau mengimplementasikannya secara manual
# Contoh penggunaan konseptual (menggunakan pustaka pemutus sirkuit hipotetis)
# from circuitbreaker import CircuitBreaker
# didit_circuit_breaker = CircuitBreaker(fail_max=5, reset_timeout=30)
# @didit_circuit_breaker
# def call_didit_api_with_circuit(data):
# return call_didit_api_with_retry(data) # Memanggil fungsi yang mengaktifkan coba lagi
# try:
# result = call_didit_api_with_circuit({"user_id": "123", "document_type": "passport"})
# print(f"Verifikasi berhasil: {result}")
# except CircuitBreakerError:
# print("Pemutus sirkuit terbuka. API Didit saat ini tidak tersedia.")
# except Exception as e:
# print(f"Verifikasi gagal: {e}")
Bagaimana Didit Membantu Membangun Integrasi IDV yang Tangguh
Platform verifikasi identitas Didit dirancang dengan ketersediaan tinggi dan ketahanan. API kami dibangun agar tangguh, tetapi mengintegrasikannya secara efektif memerlukan pertimbangan cermat terhadap faktor eksternal dalam arsitektur aplikasi Anda sendiri.
- Kode Kesalahan yang Jelas: Didit menyediakan kode kesalahan yang jelas dan konsisten, sehingga lebih mudah bagi Anda untuk menerapkan logika coba lagi selektif dan mengidentifikasi kegagalan sementara vs. permanen.
- Header Batas Laju: Tanggapan API kami menyertakan header batas laju (misalnya,
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset), memungkinkan Anda untuk secara proaktif mengelola volume permintaan Anda dan menghindari mencapai batas. - Webhook untuk Pemrosesan Asinkron: Untuk operasi tertentu, webhook dapat memberikan notifikasi asinkron, mengurangi kebutuhan akan polling konstan dan membuat integrasi Anda lebih tangguh terhadap penundaan respons API instan.
- Dokumentasi Komprehensif: Dokumentasi teknis kami merinci perilaku API, potensi kesalahan, dan praktik terbaik untuk integrasi, memberdayakan Anda untuk membangun sistem yang tangguh.
Dengan memanfaatkan fitur-fitur ini bersamaan dengan implementasi logika coba lagi dan pemutus sirkuit Anda sendiri, Anda dapat mencapai keandalan integrasi API maksimum untuk alur kerja IDV Anda.
Siap Memulai?
Membangun integrasi API verifikasi identitas yang tangguh tidak harus rumit. Dengan menerapkan logika coba lagi dan pemutus sirkuit secara strategis, Anda dapat secara signifikan meningkatkan ketahanan sistem Anda dan memberikan pengalaman yang lebih lancar bagi pengguna Anda.
Jelajahi platform verifikasi identitas Didit yang kuat hari ini. Kunjungi dokumentasi pengembang kami untuk panduan integrasi, atau coba demo interaktif kami untuk melihat kemampuan kami secara langsung. Untuk bantuan lebih lanjut, hubungi tim dukungan kami di hello@didit.me.
FAQ
Apa itu logika coba lagi dalam integrasi API?
Logika coba lagi adalah mekanisme di mana aplikasi secara otomatis mencoba kembali permintaan API yang gagal setelah penundaan singkat, biasanya digunakan untuk menangani kesalahan sementara seperti masalah jaringan atau ketidaktersediaan layanan sementara, meningkatkan keandalan keseluruhan integrasi.
Mengapa pemutus sirkuit penting untuk API verifikasi identitas?
Pemutus sirkuit melindungi aplikasi Anda dari berulang kali mencoba mengakses API verifikasi identitas yang gagal. Mereka mencegah kegagalan berjenjang dan kelelahan sumber daya dengan 'memutus' dan segera menggagalkan permintaan ke layanan yang tidak responsif, memungkinkannya waktu untuk pulih dan melindungi stabilitas sistem Anda sendiri.
Kapan saya harus menggunakan mundur eksponensial dengan logika coba lagi?
Mundur eksponensial harus digunakan dengan logika coba lagi untuk secara bertahap meningkatkan waktu tunggu di antara upaya coba lagi. Ini mencegah membanjiri layanan API yang berpotensi berjuang dan memberinya lebih banyak waktu untuk pulih, yang sangat penting untuk menjaga kesehatan aplikasi Anda dan layanan eksternal.
Apa perbedaan antara logika coba lagi dan pemutus sirkuit?
Logika coba lagi adalah untuk menangani kegagalan sementara yang berumur pendek dengan mencoba kembali operasi. Pemutus sirkuit, di sisi lain, adalah untuk menangani pemadaman layanan yang berkepanjangan dengan mencegah aplikasi terus-menerus memanggil layanan yang gagal, sehingga melindungi aplikasi dari kelelahan sumber daya dan kegagalan berjenjang.