Guider
Gränser för anrop
API:t begränsar antalet anrop per minut, så att ett program som fastnat i en loop inte gör NONOX långsamt för alla andra. Gränserna är generösa för en vanlig synk.
Gränserna
Värdena nedan läses från inställningarna på den installation som visar sidan. På nonox.app är de standardvärdena.
| Gräns | På den här installationen | Inställning |
|---|---|---|
| Per app eller API-nyckel | 120 anrop/minut | NONOX_CONNECT_RATE_LIMIT_PER_CREDENTIAL |
| Per företag (alla appar och nycklar tillsammans) | 600 anrop/minut | NONOX_CONNECT_RATE_LIMIT_PER_COMPANY |
| Per IP-adress, före inloggning | 600 anrop/minut | NONOX_CONNECT_RATE_LIMIT_PER_IP |
| Tokenadressen per IP-adress | 30 anrop/minut | NONOX_CONNECT_RATE_LIMIT_TOKEN_ENDPOINT |
| Access tokens giltighet | 15 minuter | NONOX_CONNECT_ACCESS_TOKEN_MINUTES |
| Refresh tokens giltighet | 30 dagar | NONOX_CONNECT_REFRESH_TOKEN_DAYS |
| Längsta giltighet för en API-nyckel | 365 dagar | NONOX_CONNECT_MAX_KEY_DAYS |
| Idempotensnycklar sparas | 24 timmar | – |
Gränsen per företag gäller alla appar och nycklar tillsammans, så att en enskild app inte kan tränga undan de andra.
Svarshuvudena
Varje svar berättar hur mycket som finns kvar:
HTTP/1.1 200 OK
RateLimit-Limit: 120
RateLimit-Remaining: 117
RateLimit-Reset: 42| Huvud | Betyder |
|---|---|
RateLimit-Limit |
Antal anrop per minut för nyckeln eller appen. |
RateLimit-Remaining |
Hur många som är kvar i den här minuten. |
RateLimit-Reset |
Sekunder tills fönstret börjar om. |
Över gränsen
HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
Retry-After: 23
{
"type": "urn:nonox:problem:rate_limited",
"title": "Too Many Requests",
"status": 429,
"code": "rate_limited",
"detail": "För många anrop. Försök igen om 23 sekunder.",
"instance": "urn:nonox:request:7f3c2a9e-4b1d-4c8e-9a51-2d6f0e8b3c17"
}Vänta minst Retry-After sekunder innan nästa anrop. Ett POST som fick 429 har inte utförts; försök igen med samma Idempotency-Key.
$response = Http::withToken(config('services.nonox.token'))->get($url);
if ($response->status() === 429) {
sleep((int) $response->header('Retry-After') ?: 1);
}const response = await fetch(url, { headers: { Authorization: `Bearer ${process.env.NONOX_TOKEN}` } });
if (response.status === 429) {
const seconds = Number(response.headers.get('Retry-After')) || 1;
await new Promise((resolve) => setTimeout(resolve, seconds * 1000));
}response = requests.get(url, headers={"Authorization": f"Bearer {os.environ['NONOX_TOKEN']}"}, timeout=30)
if response.status_code == 429:
time.sleep(int(response.headers.get("Retry-After", "1")))Snällt mot gränserna
- Synka med
updated_sincei stället för att hämta allt varje gång. Se Sidindelning och synk. - Använd
limit=200för stora listor: färre anrop för samma mängd. - Läs
RateLimit-Remainingoch sakta ner innan du når noll. - Kör inte många parallella trådar mot samma företag; gränsen per företag delas.