Forstå og optimer dit API-forbrug
Rate limits beskytter API'en mod misbrug og sikrer stabil performance for alle brugere. Hver API-nøgle har specifikke grænser baseret på din plan.
Forskellige planer har forskellige rate limits:
Enterprise limits er tilpasselige baseret på dine behov
Har du brug for højere limits? Opgrader din plan
Hver API response inkluderer headers der viser din aktuelle rate limit status:
X-RateLimit-Limit - Maksimale anmodninger pr. vindueX-RateLimit-Remaining - Resterende anmodninger i dette vindueX-RateLimit-Reset - Unix timestamp når limit nulstillesX-RateLimit-Limit: 60 X-RateLimit-Remaining: 45 X-RateLimit-Reset: 1704297600
// PHP $reset = $headers['X-RateLimit-Reset']; $secondsUntilReset = $reset - time(); echo "Rate limit resets in {$secondsUntilReset} seconds"; // JavaScript const reset = parseInt(headers['x-ratelimit-reset']); const secondsUntilReset = reset - Math.floor(Date.now() / 1000); console.log(`Rate limit resets in ${secondsUntilReset} seconds`);
Når du overskrider rate limit, får du en 429 respons:
HTTP/1.1 429 Too Many Requests Retry-After: 60 X-RateLimit-Limit: 60 X-RateLimit-Remaining: 0 X-RateLimit-Reset: 1704297660 { "success": false, "error": { "code": "rate_limit_exceeded", "message": "Rate limit exceeded. Try again in 60 seconds." } }
429 responses inkluderer en Retry-After header der fortæller dig hvor mange sekunder du skal vente før du prøver igen.
Vent progressivt længere mellem retries (1s, 2s, 4s, 8s...)
Brug altid Retry-After headeren hvis den er til stede
Tilføj tilfældig variation til retry delays for at undgå thundering herd
Sæt en maksimal retry grænse (f.eks. 3-5 forsøg)
Følg disse best practices for at holde dig inden for rate limits:
Tjek altid X-RateLimit-Remaining headeren og sænk farten når den bliver lav.
Begræns dine egne anmodninger proaktivt i stedet for at vente på 429 fejl.
I stedet for at lave gentagne GET requests, brug webhooks til realtids notifikationer.
Nogle endpoints understøtter batch operations - brug dem til at reducere antal requests.
Cache data der ikke ændrer sig ofte (produkter, kategorier, indstillinger).
Hent kun de sider du har brug for. Brug per_page parameteren fornuftigt.
Hent kun data du rent faktisk har brug for. Undgå at hente samme data flere gange.
Brug If-Modified-Since eller If-None-Match headers når understøttet.
Eksempler på hvordan du håndterer rate limiting i forskellige sprog:
function makeApiRequest($url, $apiKey, $maxRetries = 3) { $attempt = 0; while ($attempt < $maxRetries) { $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer {$apiKey}"], CURLOPT_HEADER => true, ]); $response = curl_exec($ch); $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $headers = substr($response, 0, $headerSize); $body = substr($response, $headerSize); curl_close($ch); if ($statusCode === 429) { // Extract Retry-After header preg_match('/Retry-After:\s*(\d+)/i', $headers, $matches); $retryAfter = $matches[1] ?? pow(2, $attempt); error_log("Rate limited. Retrying after {$retryAfter}s"); sleep($retryAfter); $attempt++; continue; } return json_decode($body, true); } throw new Exception('Max retries exceeded'); }
async function makeApiRequest(url, apiKey, maxRetries = 3) { let attempt = 0; while (attempt < maxRetries) { try { const response = await fetch(url, { headers: { 'Authorization': `Bearer ${apiKey}` } }); if (response.status === 429) { const retryAfter = parseInt( response.headers.get('retry-after') || Math.pow(2, attempt) ); console.log(`Rate limited. Retrying after ${retryAfter}s`); await new Promise(resolve => setTimeout(resolve, retryAfter * 1000)); attempt++; continue; } return await response.json(); } catch (error) { console.error('Request failed:', error); attempt++; } } throw new Error('Max retries exceeded'); }
import requests import time def make_api_request(url, api_key, max_retries=3): attempt = 0 headers = {'Authorization': f'Bearer {api_key}'} while attempt < max_retries: response = requests.get(url, headers=headers) if response.status_code == 429: retry_after = int( response.headers.get('retry-after', 2 ** attempt) ) print(f'Rate limited. Retrying after {retry_after}s') time.sleep(retry_after) attempt += 1 continue response.raise_for_status() return response.json() raise Exception('Max retries exceeded')
Hold styr på dit API forbrug:
Se API forbrug statistik i admin panelet under Settings → API Keys.
Gennemse detaljeret request log med timestamps, endpoints, og statuskoder.
Konfigurer email alerts når du nærmer dig dit rate limit (Enterprise feature).
Log rate limit headers fra hver response til at tracke forbrug over tid.
Almindelige rate limit problemer og løsninger:
Problem: Du får altid 429 errors selv med få requests.
Løsning:
Problem: Du har perioder med mange requests efterfulgt af stilhed.
Løsning:
Problem: Alle dine brugere deler samme API key og limit.
Løsning:
Udforsk relaterede emner: