Suede
في هذه الصفحة

حدود المعدّل

واجهة API مقيّدة المعدّل لكلّ مفتاح API (مع الرجوع إلى عنوان IP للعميل في حالة الطلب غير المُصادَق عليه). يضبط Suede الحدّ والنافذة وقد يغيّرهما، لذا اقرأهما من ترويسات الاستجابة بدلًا من تثبيت رقم في الكود.

الترويسات

تتضمّن كلّ استجابة /v1:

الترويسة المعنى
X-RateLimit-Limit الحدّ الأقصى للطلبات المسموح بها في النافذة الحالية.
X-RateLimit-Remaining الطلبات المتبقّية في النافذة الحالية.
X-RateLimit-Reset ثانية حقبة يونكس التي تُعاد عندها النافذة.

عندما تتجاوز الحدّ، تستجيب واجهة API بـHTTP 429 وترويسة Retry-After (عدد الثواني التي يجب الانتظار):

JSON
{ "error": { "type": "rate_limited", "message": "Rate limit exceeded. Slow down and retry after the reset.", "request_id": "…" } }

معالجة 429

تراجَع وأعِد المحاولة بعد Retry-After ثانية. نمط بسيط وموثوق:

cURL
# Inspect your current budget from the headers of any response.
curl -sD - -o /dev/null "https://api.suede.io/v1/search?q=test" \
  -H "Authorization: Bearer $SUEDE_API_KEY" | grep -i '^x-ratelimit'
C#
async Task<HttpResponseMessage> GetWithRetryAsync(HttpClient http, string url)
{
    while (true)
    {
        var res = await http.GetAsync(url);
        if (res.StatusCode != System.Net.HttpStatusCode.TooManyRequests) return res;
        var wait = res.Headers.RetryAfter?.Delta ?? TimeSpan.FromSeconds(1);
        await Task.Delay(wait);
    }
}
JavaScript
async function getWithRetry(url, init) {
  for (;;) {
    const res = await fetch(url, init);
    if (res.status !== 429) return res;
    const wait = Number(res.headers.get("retry-after") ?? "1") * 1000;
    await new Promise((r) => setTimeout(r, wait));
  }
}

تقييد المعدّل مستقلّ عن الفوترة. راجع الأخطاء لاستجابات 402 التي تُعاد عندما تكون عضويّتك غير نشطة أو رصيد ائتمانك فارغًا.

هل كانت هذه الصفحة مفيدة؟