Limitarea ratei
API-ul Geo-Engine implementează limitarea ratei pentru a asigura o utilizare echitabilă și stabilitate platformei.
Înțelegerea limitelor de rată
Când depășiți limita de rată, API-ul răspunde cu:
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1645000000
X-RateLimit-Retry-After: 60
Antetele de răspuns
- X-RateLimit-Limit - Cererile maxime permise în această fereastră
- X-RateLimit-Remaining - Cererile rămase în fereastra curentă
- X-RateLimit-Reset - Timestamp Unix când se resetează limita
- X-RateLimit-Retry-After - Secundele de așteptat înainte de a reîncerca
Verificarea limitelor dvs
Fiecare răspuns reușit include antetele de limitare a ratei. Monitorizați-le pentru a evita atingerea limitei.
Exemplu JavaScript
async function checkRateLimit() {
const response = await fetch('https://graph.quarticle.ro/graph/api/v1/places/geocode?q=Berlin', {
headers: { 'Authorization': `${apiKey}` }
});
console.log('Limit:', response.headers.get('X-RateLimit-Limit'));
console.log('Remaining:', response.headers.get('X-RateLimit-Remaining'));
console.log('Reset:', response.headers.get('X-RateLimit-Reset'));
return response.json();
}
Exemplu Python
import requests
import time
headers = {'Authorization': f'{api_key}'}
response = requests.get('https://graph.quarticle.ro/graph/api/v1/places/geocode?q=Berlin', headers=headers)
print(f"Limit: {response.headers.get('X-RateLimit-Limit')}")
print(f"Remaining: {response.headers.get('X-RateLimit-Remaining')}")
print(f"Reset: {response.headers.get('X-RateLimit-Reset')}")
Cele mai bune practici
1. Implementați backoff
Nu reîncercați imediat când atingeți limita de rată. Utilizați backoff exponențial:
async function apiRequestWithBackoff(url, options, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.status !== 429) {
return response;
}
const retryAfter = response.headers.get('X-RateLimit-Retry-After') || 60;
console.log(`Rate limited. Retrying after ${retryAfter}s`);
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
}
throw new Error('Max retries exceeded');
}
2. Stocați în cache rezultatele
Stocați în cache răspunsurile API pentru a reduce cererile redundante:
const cache = new Map();
const CACHE_TTL = 60000; // 60 seconds
async function fetchWithCache(url) {
const now = Date.now();
if (cache.has(url)) {
const { data, timestamp } = cache.get(url);
if (now - timestamp < CACHE_TTL) {
return data;
}
}
const response = await fetch(url, {
headers: { 'Authorization': `${apiKey}` }
});
const data = await response.json();
cache.set(url, { data, timestamp: now });
return data;
}
Fereastra de limitare a ratei
Limitele de rată sunt calculate pe minut și se resetează orar. De exemplu:
- Dacă limita dvs este 60 cereri/minut
- Puteți efectua până la 60 cereri în orice fereastră de 60 de secunde
- Fereastra se mișcă continuu (nu pe bază de calendar)
Cereri în rafală
Puteți depăși temporar limita pe minut dacă aveți cereri nefolosite din minutele anterioare. Cu toate acestea, nu puteți depăși limita dvs zilnică.