آموزش کار با API در پایتون | بهینه‌سازی و امنیت

محدودیت‌های نرخ (Rate Limiting)

Rate Limiting به معنای محدود کردن تعداد درخواست‌هایی است که یک کاربر یا برنامه می‌تواند در یک بازه زمانی مشخص به یک API ارسال کند. این محدودیت توسط ارائه‌دهنده API اعمال می‌شود تا از بارگذاری بیش از حد سرور جلوگیری کرده و منابع را به صورت عادلانه بین همه کاربران تقسیم کند.

چرا Rate Limiting مهم است؟

  • از فروپاشی سرور در اثر ترافیک ناگهانی جلوگیری می‌کند.
  • امنیت را افزایش می‌دهد (مثلاً حملات Brute Force را محدود می‌کند).
  • کیفیت سرویس را برای همه کاربران تضمین می‌کند.

نحوه اطلاع از محدودیت‌ها
APIهای عمومی معمولاً در هدرهای پاسخ (Response Headers) خود اطلاعات محدودیت را نشان می‌دهند. سه هدر رایج عبارتند از:

  • X-RateLimit-Limit: تعداد کل درخواست‌های مجاز در بازه زمانی.
  • X-RateLimit-Remaining: تعداد درخواست‌های باقی‌مانده.
  • X-RateLimit-Reset: زمان (به ثانیه) تا بازنشانی محدودیت.

مثال کد برای بررسی محدودیت در پایتون
فرض کنید به API گیت‌هاب متصل شده‌اید. کد زیر تعداد درخواست‌های باقی‌مانده را از هدرها استخراج می‌کند:

import requests

url = "https://api.github.com"
response = requests.get(url)
print(response.headers.get("X-RateLimit-Remaining"))

مدیریت Rate Limiting در برنامه شما
اگر برنامه شما به تعداد زیادی درخواست نیاز دارد، باید یک مکانیسم تأخیر (Delay) یا صف (Queue) پیاده‌سازی کنید. برای مثال می‌توانید از time.sleep() برای فاصله انداختن بین درخواست‌ها استفاده کنید، یا کتابخانه‌ای مانند ratelimit را امتحان کنید:

from ratelimit import limits, sleep_and_retry
import requests

@sleep_and_retry
@limits(calls=5, period=1)  # حداکثر 5 درخواست در 1 ثانیه
def call_api():
    return requests.get("https://api.example.com")

call_api()  # این تابع خودکار در صورت نیاز صبر می‌کند

نکته مهم:
اگر محدودیت را نادیده بگیرید، API معمولاً کد وضعیت 429 Too Many Requests را برمی‌گرداند. در این صورت باید صبر کنید تا زمان بازنشانی (Reset time) فرا برسد و سپس درخواست خود را تکرار کنید.

پرسش و پاسخ این درس

برای ثبت پرسش ابتدا در سایت وارد شوید.

  • 1
  • 2
  • 3