Hai! Sebagai penyedia API, saya sudah lama berkecimpung dalam dunia ini, dan salah satu aspek terpenting dalam menjalankan layanan API yang sukses adalah penerapan pembatasan API. Dalam postingan blog ini, saya akan berbagi dengan Anda cara menerapkan pembatasan API secara efektif.
Apa itu Pembatasan API?
Hal pertama yang pertama, mari kita bahas tentang apa itu pelambatan API. Pembatasan API adalah teknik yang digunakan untuk mengontrol kecepatan klien dalam mengakses API. Ini menetapkan batasan jumlah permintaan yang dapat dibuat klien dalam jangka waktu tertentu. Hal ini membantu mencegah penyalahgunaan, melindungi sumber daya server, dan memastikan penggunaan wajar bagi semua pengguna.
Mengapa Pembatasan API Penting?
Ada beberapa alasan mengapa pembatasan API itu penting. Sebagai permulaan, ini membantu mencegah serangan penolakan layanan (DoS). Pengguna jahat dapat mencoba membanjiri API Anda dengan permintaan yang membebani server Anda dan mengganggu layanan Anda. Pembatasan membatasi jumlah permintaan yang dapat mereka buat, sehingga mempersulit mereka untuk melakukan serangan tersebut.
Kedua, ini memastikan bahwa sumber daya server Anda digunakan secara efisien. Jika Anda memiliki banyak klien yang membuat permintaan berlebihan secara bersamaan, server Anda bisa kewalahan, menyebabkan waktu respons menjadi lambat atau bahkan crash. Dengan membatasi permintaan, Anda dapat mengatur beban di server Anda dan menjaga API Anda tetap berjalan lancar.
Terakhir, ini mempromosikan penggunaan wajar di antara semua klien. Tanpa pembatasan, beberapa klien mungkin memonopoli sumber daya API Anda, sehingga menyebabkan kinerja yang buruk bagi klien lainnya. Pembatasan memastikan bahwa setiap klien mendapat bagian yang adil dari sumber daya yang tersedia.
Bagaimana Menerapkan Pembatasan API
1. Algoritma Token Bucket
Salah satu algoritma paling populer untuk pembatasan API adalah algoritma token bucket. Begini cara kerjanya:
Bayangkan Anda memiliki sebuah ember yang dapat menampung sejumlah token. Setiap token mewakili permintaan yang dapat dibuat oleh klien. Secara berkala, token baru ditambahkan ke keranjang hingga kapasitas maksimumnya. Saat klien membuat permintaan, klien harus "menghabiskan" token dari keranjang. Jika tidak ada token yang tersisa di keranjang, permintaan akan ditolak atau dimasukkan ke dalam antrean hingga token tersedia.
Berikut adalah pseudocode sederhana seperti Python untuk mengimplementasikan algoritma token bucket:


class TokenBucket: def __init__(self, capacity, rate): self.capacity = capacity self.rate = rate self.tokens = capacity self.last_update = time.time() def get_tokens(self): now = time.time() # Hitung jumlah token yang ditambahkan sejak pembaruan terakhir new_tokens = (sekarang - self.last_update) * self.rate self.tokens = min(self.capacity, self.tokens + new_tokens) self.last_update = sekarang kembalikan self.tokens def konsumsi(self, tokens): if self.get_tokens() >= tokens: self.tokens -= tokens return True return False
Dalam kode ini,kapasitasadalah jumlah maksimum token yang dapat ditampung keranjang, dankecepatanadalah tingkat penambahan token baru ke keranjang per detik.
2. Algoritma Jendela Tetap
Algoritme jendela tetap adalah cara sederhana lainnya untuk mengimplementasikan pembatasan API. Dengan algoritma ini, Anda membagi waktu menjadi interval tetap (misalnya setiap menit atau setiap jam). Untuk setiap interval, Anda melacak jumlah permintaan yang dibuat klien. Jika jumlah permintaan melebihi batas yang telah ditentukan dalam interval tersebut, permintaan berikutnya akan ditolak.
Inilah cara Anda mengimplementasikannya dengan Python:
impor kelas waktu FixedWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = window self.request_count = 0 self.window_start = time.time() defallow_request(self): sekarang = time.time() if now - self.window_start > self.window: # Reset jendela self.request_count = 0 self.window_start = sekarang if self.request_count < self.limit: self.request_count += 1 return Benar return False
Dalam kode ini,membatasiadalah jumlah maksimum permintaan yang dapat dibuat klien dalamjendelakerangka waktu.
3. Algoritma Jendela Geser
Algoritma jendela geser adalah versi yang lebih maju dari algoritma jendela tetap. Daripada membagi waktu menjadi interval tetap, ia menggunakan jendela geser untuk melacak permintaan. Ini berarti jendela bergerak secara terus-menerus, dan memperhitungkan permintaan yang dibuat di masa lalu.
Untuk mengimplementasikan algoritma jendela geser, Anda dapat menggunakan struktur data seperti buffer melingkar untuk menyimpan stempel waktu setiap permintaan. Anda kemudian memeriksa apakah jumlah permintaan dalam jendela geser melebihi batas.
dari koleksi import deque import time class SlidingWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = window self.request_timestamps = deque() defallow_request(self): now = time.time() # Hapus permintaan lama dari deque while self.request_timestamps dan sekarang - self.request_timestamps[0] > self.window: self.request_timestamps.popleft() if len(self.request_timestamps) < self.limit: self.request_timestamps.append(now) return True return False
Menerapkan Pembatasan di API Anda
Setelah Anda memilih suatu algoritma, Anda perlu mengintegrasikannya ke dalam API Anda. Berikut langkah-langkah umumnya:
1. Identifikasi Klien
Anda harus memiliki cara untuk mengidentifikasi setiap klien yang membuat permintaan ke API Anda. Ini bisa melalui kunci API, ID pengguna, atau pengenal unik lainnya.
2. Menyimpan Informasi Throttle
Anda harus menyimpan informasi tentang riwayat permintaan setiap klien. Ini bisa dalam database, cache (seperti Redis), atau struktur data dalam memori. Misalnya, jika Anda menggunakan algoritme keranjang token, Anda harus menyimpan jumlah token yang dimiliki setiap klien di keranjangnya.
3. Periksa Batas Throttle
Sebelum memproses permintaan, periksa apakah klien telah melampaui batas pembatasannya. Jika sudah, kembalikan respons kesalahan yang sesuai (misalnya, kode status 429 Terlalu Banyak Permintaan). Jika belum, proses permintaan seperti biasa dan perbarui informasi throttle yang sesuai.
Contoh Pembatasan API di API Dunia Nyata
Mari kita lihat beberapa contoh dunia nyata. Misalnya, API Twitter memiliki batasan pembatasan yang ketat. Jenis titik akhir yang berbeda memiliki batas kecepatan yang berbeda pula. Misalnya, API pencarian memiliki batas 450 permintaan per jangka waktu 15 menit untuk pengguna standar.
Contoh lainnya adalah Google Maps API. Google menggunakan pembatasan untuk mengelola penggunaan layanan peta mereka. Mereka memiliki tingkat batas penggunaan yang berbeda berdasarkan jenis layanan dan paket harga yang Anda gunakan.
Kesimpulan
Menerapkan pembatasan API sangat penting bagi penyedia API mana pun. Ini membantu melindungi layanan Anda dari penyalahgunaan, mengelola sumber daya server, dan memastikan penggunaan wajar di antara semua klien. Baik Anda memilih algoritme token bucket, algoritme jendela tetap, atau algoritme jendela geser, pastikan untuk mengintegrasikannya dengan benar ke dalam API Anda.
Jika Anda berkecimpung dalam industri farmasi dan mencari API berkualitas tinggi sepertiFenofibrate丨CAS 49562-28-9,Finasterida丨CAS 98319 - 26 - 7, atauHidrokortison Asetat丨CAS 50-03-3, dan Anda tertarik dengan layanan API kami, kami ingin mengobrol dengan Anda tentang kebutuhan Anda. Jangan ragu untuk menghubungi kami untuk memulai diskusi tentang persyaratan API Anda dan bagaimana kita dapat bekerja sama.
Referensi
- Leighton, F. Thomson, dan Satish Rao. "Perutean paket dan penjadwalan toko-pekerjaan dalam waktu paralel O (c log c)." Jurnal ACM (JACM) 40.2 (1993): 261 - 289.
- Nagle, John. "Kontrol kemacetan di internetwork IP/TCP." Tinjauan Komunikasi Komputer ACM SIGCOMM 14.5 (1984): 11 - 17.
