API adalah tulang punggung penting dari web modern kita, memungkinkan aplikasi yang berbeda untuk berkomunikasi dan bertukar data satu sama lain. Dengan setiap aplikasi memiliki ceruknya masing-masing, beberapa orang jahat cenderung menyalahgunakan aplikasi yang berguna ini, sehingga berdampak negatif pada pengalaman pengguna lain. Namun, bagaimana jika ada cara untuk mencegah hal ini?
Memperkenalkan kepada Anda Apidog, alat pengembangan API all-in-one yang memungkinkan Anda menguji API tanpa batas. Satu-satunya batasan yang dimiliki Apidog adalah batasan yang dimiliki API pihak ketiga (apakah mereka membatasi API mereka atau tidak).
Jika Anda tertarik untuk mencoba Apidog, mulai secara gratis hari ini (atau di masa mendatang) dengan mengklik tombol di bawah ini! 👇 👇 👇
Untuk mengetahui apa perbedaan antara throttling dan pembatasan laju, kita akan mendefinisikannya satu per satu.
Apa itu Throttling?
Dalam konteks API, throttling dianggap sebagai pendekatan dinamis untuk mengelola akses API dan mencegah API dari kelebihan beban. Throttling API mengatur aliran permintaan yang masuk untuk memastikan stabilitas dan kinerja API.
Fitur Utama Throttling API
1. Penyesuaian Dinamis:
- Tidak seperti batasan tetap pembatasan laju, throttling secara dinamis menyesuaikan waktu respons berdasarkan kondisi lalu lintas waktu nyata. Bayangkan jalan raya dengan batas kecepatan variabel. Lalu lintas memicu penyesuaian (throttling) untuk menjaga kelancaran aliran (stabilitas API).
2. Teknik dan Algoritma:
- Leaky Bucket: Permintaan yang masuk mengisi bucket virtual dengan kebocoran kecil di bagian bawah. Waktu respons meningkat (kebocoran melambat) saat bucket terisi (sistem mendekati kelebihan beban), dan sebaliknya.
- Token Buckets: Pengguna memiliki sejumlah token (permintaan) terbatas per jangka waktu. Setiap permintaan mengonsumsi token. Jika tidak ada token yang tersedia (bucket kosong), permintaan akan di-throttle hingga token diisi ulang.
3. Opsi Konfigurasi:
- Granularitas: Throttling dapat diterapkan secara global atau ke titik akhir API tertentu berdasarkan penggunaan sumber daya mereka.
- Ambang Batas: Ambang batas yang dapat disesuaikan menentukan kapan throttling dimulai. Ini dapat didasarkan pada faktor-faktor seperti permintaan bersamaan atau pemanfaatan sumber daya.
- Jendela Waktu: Perilaku throttling dapat dikonfigurasi untuk jendela waktu tertentu (misalnya, jam sibuk).
4. Mekanisme Respons:
- Memperlambat: Pendekatan yang paling umum, meningkatkan waktu respons untuk permintaan berikutnya.
- Kode Kesalahan: Mengembalikan kode kesalahan HTTP tertentu (misalnya, 429 Terlalu Banyak Permintaan) untuk menunjukkan throttling dan opsi coba lagi potensial.
- Antrean Tunggu: Menahan sementara permintaan dalam antrean hingga sumber daya tersedia.
5. Fitur Lanjutan:
- Whitelisting: Memberikan pengecualian throttling kepada pengguna atau aplikasi tertentu untuk operasi penting.
- Blacklisting: Throttling lebih agresif untuk pengguna yang menunjukkan perilaku kasar.
- Integrasi dengan Pemantauan: Parameter throttling dapat disesuaikan secara dinamis berdasarkan data penggunaan API waktu nyata.
Contoh Kode Throttling API
1. Throttling API sederhana dengan penundaan (Python):
def handle_request(user_id):
# Simulate checking a shared resource counter
if resource_counter > threshold:
time.sleep(delay_time) # Throttle by introducing a delay
# Process request logic here...
2. Token bucket throttling untuk permintaan API (Python)
from threading import Lock
class TokenBucket:
"""
A simple token bucket class for rate limiting.
"""
def __init__(self, capacity, refill_rate):
"""
Initialize the token bucket with a specific capacity and refill rate.
Args:
capacity (int): The maximum number of tokens the bucket can hold.
refill_rate (float): The rate at which tokens are added to the bucket (tokens per second).
"""
self.capacity = capacity
self.refill_rate = refill_rate
self.tokens = capacity # Start with a full bucket
self.last_refill_time = time.time()
self.lock = Lock()
def consume(self, amount):
"""
Attempts to consume a specified number of tokens from the bucket.
Args:
amount (int): The number of tokens to consume.
Returns:
bool: True if the tokens were consumed successfully, False otherwise.
"""
with self.lock:
self._refill()
if self.tokens >= amount:
self.tokens -= amount
return True
return False
def _refill(self):
"""
Refills the bucket based on the elapsed time and refill rate.
"""
now = time.time()
elapsed_time = now - self.last_refill_time
self.tokens = min(self.capacity, self.tokens + (elapsed_time * self.refill_rate))
self.last_refill_time = now
# Example usage
bucket = TokenBucket(capacity=5, refill_rate=1) # 5 tokens, refilled at 1 token/second
def access_api():
# Simulate API request logic here...
print("Accessing API...")
if bucket.consume(2):
access_api()
else:
print("Request throttled, not enough tokens!")
# Try again after a short delay
time.sleep(1)
if bucket.consume(1):
access_api()
else:
print("Request throttled, not enough tokens!")
Penjelasan kode (langkah demi langkah):
- Pertama, definisikan kelas
TokenBucket
yang mengelola kumpulan token - Mengambil kapasitas (token maksimum) dan laju pengisian ulang (token per detik) sebagai argumen.
- Metode
consume
mencoba menghapus sejumlah token tertentu dari bucket. - Memanggil metode pribadi
_refill
untuk memastikan bucket diperbarui berdasarkan waktu lampau. - Jika token cukup, mereka dikonsumsi - metode mengembalikan
True
- Jika tidak, metode mengembalikan
False
- menunjukkan throttling.
Apa itu Pembatasan Laju?
Dalam konteks API, pembatasan laju mengacu pada batasan yang ditetapkan pada jumlah permintaan yang dapat dilakukan pengguna atau aplikasi dalam periode tertentu. Bayangkan itu seperti loket tiket di tempat wisata populer, di mana hanya sejumlah permintaan tertentu yang diizinkan per menit.
Fitur Utama Pembatasan Laju API
1. Konfigurasi Batas:
Batas Permintaan: Penyedia API menentukan jumlah maksimum permintaan yang diizinkan per pengguna atau aplikasi dalam jendela waktu tertentu (misalnya, 100 permintaan per jam). Batas ini dapat didasarkan pada faktor-faktor seperti:
- Tingkatan Pengguna: Paket gratis vs. berbayar mungkin memiliki batas yang berbeda.
- Titik Akhir API: Fungsionalitas yang berbeda mungkin memiliki persyaratan sumber daya yang bervariasi, yang mengarah pada batas yang berbeda.
Jendela Waktu: Batas diterapkan dalam jangka waktu tertentu, biasanya detik, menit, atau jam. Ini memungkinkan ledakan aktivitas yang terkontrol sambil mencegah kelebihan beban yang berkelanjutan.
2. Mekanisme Penghitungan:
Identifikasi Pengguna: Permintaan dikaitkan dengan pengguna atau aplikasi. Ini dapat dicapai melalui:
- Kunci API: Pengidentifikasi unik yang diberikan kepada pengembang untuk otentikasi dan pelacakan penggunaan.
- Alamat IP: Meskipun kurang aman, alamat IP dapat digunakan untuk pembatasan laju dasar.
Penghitung Permintaan: API melacak jumlah permintaan yang diterima dari setiap pengguna/aplikasi dalam jendela waktu saat ini.
3. Strategi Penegakan:
- Pemblokiran: Ketika pengguna mencapai batas, permintaan berikutnya mungkin diblokir sepenuhnya hingga jendela waktu direset. Ini adalah pendekatan yang lebih ketat yang cocok untuk mencegah penyalahgunaan.
- Throttling: Throttling, sering digunakan bersamaan dengan pembatasan laju, memperlambat permintaan berikutnya alih-alih memblokirnya sepenuhnya. Ini memungkinkan beberapa tingkat akses sambil mencegah kelebihan beban. (Throttling adalah konsep terpisah tetapi dapat digunakan bersama dengan pembatasan laju)
4. Fitur Lanjutan:
- Batas Burst: Tunjangan jangka pendek untuk melebihi batas laju rata-rata untuk mengakomodasi ledakan aktivitas. Ini menawarkan fleksibilitas untuk kasus penggunaan yang sah.
- Leaky Bucket: Pendekatan metaforis di mana permintaan seperti air yang mengisi bucket dengan kebocoran kecil. Kebocoran mewakili batas laju. Permintaan diproses selama bucket tidak penuh.
- Token Buckets: Pengguna dialokasikan satu set token (permintaan) yang diisi ulang dari waktu ke waktu. Permintaan mengonsumsi token, dan pengguna di-throttle jika tidak ada token yang tersedia.
5. Komunikasi dan Pemantauan:
- Dokumentasi API: Dokumentasi yang jelas menguraikan batas laju, termasuk batas spesifik, jendela waktu, dan metode penegakan.
- Pemantauan dan Peringatan: Penyedia API memantau pola penggunaan dan menyesuaikan batas laju sesuai kebutuhan untuk menjaga stabilitas.
Contoh Kode Pembatasan Laju API
1. Melacak batas dan jendela waktu (Python):
# Simulate storing API rate limit information retrieved from API documentation
rate_limit = 100 # Requests per hour
time_window = 3600 # Seconds in an hour
last_request_time = None
def make_api_request():
global last_request_time
# Check if within the time window and enough requests remaining (hypothetical)
if last_request_time is None or (time.time() - last_request_time) >= time_window:
# Make the API request
last_request_time = time.time()
# ... (API request logic)
else:
print("API rate limit reached, waiting for reset...")
# Implement backoff strategy (see point 3)
# Example usage
make_api_request()
Contoh kode di atas menampilkan situasi di mana Anda menyimpan informasi batas laju yang diambil (permintaan dan jendela waktu), dan melacak waktu permintaan terakhir. Kode tersebut kemudian memeriksa apakah permintaan dapat dilakukan berdasarkan waktu yang tersisa dan permintaan yang diizinkan dalam jendela.
2. Memanfaatkan header respons API (Python):
import requests
def make_api_request():
response = requests.get("https://api.example.com/data")
if response.status_code == 429: # Rate limit exceeded code
# Extract rate limit information from headers (X-RateLimit-Remaining, X-RateLimit-Reset)
# Implement backoff strategy (see point 3)
else:
# Process successful response
# ...
Contoh kode di atas memeriksa kode status respons untuk kode kesalahan batas laju umum 429
dan mencoba mengekstrak informasi yang relevan dari header respons jika ditemukan.
Perbedaan yang Dirangkum Antara Throttling VS. Pembatasan Laju
Fitur | Throttling | Pembatasan Laju |
---|---|---|
Tujuan | Mengelola aliran lalu lintas API untuk menjaga kinerja | Mengontrol akses API untuk mencegah penyalahgunaan dan kelebihan beban |
Mekanisme | Secara dinamis menyesuaikan waktu respons berdasarkan lalu lintas | Menetapkan batas keras pada permintaan per jendela waktu |
Penegakan | Memperlambat permintaan selama periode puncak (lebih fleksibel) | Memblokir permintaan yang melebihi batas (lebih ketat) |
Fokus | Menjaga stabilitas dan kinerja | Keadilan dan mencegah penyalahgunaan |
Konfigurasi | Ambang batas, jendela waktu, mekanisme respons | Batas dan jendela waktu |
Kasus Penggunaan | Mencegah kelebihan beban selama lalu lintas puncak, memprioritaskan permintaan mendesak | Melindungi terhadap serangan DoS, mengontrol penggunaan |
Apidog - Permintaan Tanpa Batas untuk Menyempurnakan Aplikasi Anda
Satu-satunya hal yang menghentikan Anda untuk membuat API terbaik adalah keterbatasan alat Anda - sebagian besar alat API saat ini memiliki paywall. Jika Anda tidak membayar, Anda tidak bisa mendapatkan fitur-fitur penting untuk pengembangan API. Namun, satu alat pengembangan API melangkah lebih jauh untuk menyediakan layanan terbaik bagi pengembang.

Temui Apidog, alat pengembangan API all-in-one yang memfasilitasi setiap proses pengembangan API untuk seluruh siklus hidup API. Dengan Apidog, Anda dapat membuat API baru dan memodifikasi API yang sudah ada, dan melakukan pengujian, mock, dan dokumentasi untuk memastikan bahwa API Anda akan berjalan dengan sempurna.
Membangun API dengan Apidog
Dengan Apidog, Anda dapat membuat API sendiri. Ini berarti Anda juga dapat mengatur batas laju API Anda sendiri, dan memutuskan apakah Anda ingin me-throttle API Anda dengan bantuan pengkodean tambahan.

Mulailah dengan menekan tombol API Baru
, seperti yang ditunjukkan pada gambar di atas.

Selanjutnya, Anda dapat memilih banyak karakteristik API. Pada halaman ini, Anda dapat:
- Mengatur metode HTTP (GET, POST, PUT, atau DELETE)
- Mengatur URL API (atau titik akhir API) untuk interaksi klien-server
- Menyertakan satu/beberapa parameter untuk diteruskan dalam URL API
- Memberikan deskripsi tentang fungsionalitas apa yang ingin disediakan oleh API. Di sini, Anda juga dapat menjelaskan batas laju yang Anda rencanakan untuk diterapkan pada API Anda.
Semakin banyak detail yang dapat Anda berikan pada tahap perancangan, semakin deskriptif dokumentasi API Anda, seperti yang ditunjukkan pada bagian selanjutnya dari artikel ini.
Pastikan juga untuk menyertakan apakah ada batasan laju yang diberlakukan pada API, karena pengguna akan memerlukan pengetahuan itu untuk bekerja dengan API.
Untuk memberikan bantuan dalam membuat API jika ini adalah pertama kalinya Anda membuatnya, Anda dapat mempertimbangkan untuk membaca artikel-artikel ini.



Setelah Anda menyelesaikan semua kebutuhan dasar untuk membuat permintaan, Anda dapat mencoba membuat permintaan dengan mengklik Kirim
. Anda kemudian akan menerima respons di bagian bawah jendela Apidog, seperti yang ditunjukkan pada gambar di atas.
Antarmuka pengguna yang sederhana dan intuitif memungkinkan pengguna untuk dengan mudah melihat respons yang diperoleh dari permintaan. Penting juga untuk memahami struktur respons karena Anda perlu mencocokkan kode di sisi klien dan server.
Hasilkan Dokumentasi API Deskriptif dengan Apidog
Dengan Apidog, Anda dapat dengan cepat membuat dokumentasi API yang mencakup semua yang dibutuhkan pengembang perangkat lunak hanya dengan beberapa klik.

Panah 1 - Pertama, tekan tombol Bagikan
di sisi kiri jendela aplikasi Apidog. Anda kemudian akan dapat melihat halaman "Dokumen Bersama", yang seharusnya kosong.
Panah 2 - Tekan tombol + Baru
di bawah Tidak Ada Data
untuk mulai membuat dokumentasi API Apidog pertama Anda.
Pilih dan Sertakan Properti Dokumentasi API Penting

Apidog memberi pengembang opsi untuk memilih karakteristik dokumentasi API, seperti siapa yang dapat melihat dokumentasi API Anda dan mengatur kata sandi file, sehingga hanya individu atau organisasi terpilih yang dapat melihatnya.
Lihat atau Bagikan Dokumentasi API Anda

Apidog mengompilasi detail proyek API Anda ke dalam dokumentasi API yang dapat dilihat melalui URL situs web. Yang harus Anda lakukan adalah mendistribusikan URL sehingga orang lain dapat melihat dokumentasi API Anda!
Jika diperlukan lebih banyak detail, baca artikel ini tentang cara menghasilkan dokumentasi API menggunakan Apidog:

Kesimpulan
Throttling dan pembatasan laju adalah alat penting untuk mengelola akses API dan memastikan kelancaran operasi. Meskipun mereka berbagi tujuan umum untuk mencegah kelebihan beban, mereka berbeda dalam pendekatan mereka.
Pembatasan laju bertindak seperti penjaga gerbang yang ketat, menetapkan batas keras pada permintaan dalam jangka waktu. Ini memprioritaskan keadilan dan mencegah penyalahgunaan. Throttling, di sisi lain, berfungsi seperti sakelar peredup, secara dinamis menyesuaikan waktu respons berdasarkan lalu lintas. Ini memastikan stabilitas dan kinerja dengan menangani lonjakan permintaan dengan baik.
Memahami kekuatan dari setiap pendekatan memungkinkan penyedia API untuk membuat sistem kontrol akses yang kuat yang menyeimbangkan kebutuhan pengguna dengan kapasitas API, yang mengarah pada pengalaman yang aman dan berkinerja untuk semua orang.
Dengan Apidog, Anda tidak perlu khawatir tentang permintaan terbatas. Anda juga dapat mengimpor API yang ingin Anda pahami dan menganalisisnya menggunakan desain Apidog yang sederhana namun intuitif. Mulai perjalanan pengembangan API Anda dengan Apidog hari ini!