Varför komplexitetsbaserad rate limiting?
Traditionella REST API:er använder request-baserad rate limiting där varje förfrågan kostar samma credits, oavsett om ni hämtar ett fält eller hundratals och oavsett om ni läser eller ändrar — trots den stora skillnaden i serverbelastning.
GraphQL:s komplexitetsbaserade approach löser detta genom att beräkna kostnad utifrån den faktiskt efterfrågade datan och de utförda operationerna. Så får ni mer flexibilitet samtidigt som serverbelastningen förblir förutsägbar.
Rate limit
Zonos använder ett poängbaserat system där varje query drar av poäng baserat på komplexitet. Ni har en pool tillgängliga poäng som:
- Fylls på med 3 000 poäng per sekund (30 000 poäng per 10 sekunder)
- Har en maxkapacitet på 300 000 poäng
Så kan ni ibland göra bursts av komplexa queries samtidigt som ni behåller ett hållbart förfrågningstempo.
Hur querykostnader beräknas
Varje GraphQL-förfrågan får en beräknad kostnad före körning:
Baskostnader
- Query: 5 poäng
- Mutation: 10 poäng
- Object: 1 poäng per returnerat objekt
- Scalar fields: 0 poäng (gratis)
Scalar fields som strängar, integers, ID:n och booleans räknas inte. Ni betalar bara för basoperationen och de returnerade objekten.
Exempel: enkel query
query { landedCost(id: "123") { id createdBy shipToCountry }}Kostnadsfördelning: 5 (basquery) + 1 (landed cost-objekt) = 6 poäng
Scalar fields (id, name, currency) är gratis.
Exempel: query med flera objekt
{ orders(first: 10, filter: { status: COMPLETED }) { edges { cursor node { id } } }}Kostnadsfördelning: 5 (basquery) + 10 (10 orders × 1 poäng vardera) = 15 poäng
Exempel: mutation
mutation { landedCostCalculate(input: { ... }) { id }}Kostnadsfördelning: 10 (basmutation) + ungefär 50 (returnerade objekt) = 60 poäng
En typisk Landed Cost-beräkning kostar ungefär 60 poäng i komplexitet.
Visa querykomplexitet
Varje API-svar innehåller en zonos-query-complexity-header med kostnaden för er query:
zonos-query-complexity: 58Den här headern visar exakt hur många poäng queryn har förbrukat. Använd den för att övervaka API-användning och optimera dyra queries.
Hantera rate limits
Om ni överskrider er rate limit får ni ett felmeddelande. För att hantera rate limits effektivt:
Övervaka er komplexitet
Kontrollera zonos-query-complexity-headern i svar för att förstå querykostnader och identifiera dyra mönster.
Implementera retry-logik
Vid rate limits implementerar ni exponential backoff och retry-logik. Eftersom bucketen fylls på med 3 000 poäng per sekund beräknar ni lämpliga väntetider baserat på querykomplexitet.
Batcha effektivt
Med GraphQL kan ni begära flera queries i en enda förfrågan:
{ landedCost(id: "landed_cost_123") { id createdAt } order(orderId: "order_123") { id status createdAt }}Bästa praxis
Hämta bara det ni behöver
Querykomplexitet är proportionell mot den data ni hämtar. Strukturera queries så att ni bara hämtar fält och objekt som ni verkligen använder.
query { order(orderId: "order_123") { id status createdAt updatedAt items { id name quantity amount } shipments { id } }}Paginerera stora dataset
Vid flera objekt använder ni rimliga sidstorlekar:
{ orders(first: 100, filter: { status: COMPLETED }) { edges { cursor node { id } } }}Hämta 10–50 objekt åt gången och paginera genom resultaten, i stället för hundratals objekt i en enda query.
Undvik onödig nesting
Varje nästlat objekt ökar er komplexitet. Hämta nästlad data bara när ni behöver den.
GraphQL API rate limiting
Lär er hur Zonos beräknar querykostnader baserat på komplexitet.
Zonos rate-limitar GraphQL API-förfrågningar baserat på querykomplexitet i stället för antal förfrågningar. Så förblir användningen rättvis samtidigt som ni hämtar precis den data ni behöver.