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