Sări la conținutul principal

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ă.