DOCS

GraphQL API rate limiting

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.

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

1query {
2 landedCost(id: "123") {
3 id
4 createdBy
5 shipToCountry
6 }
7}

Kostnadsfördelning: 5 (basquery) + 1 (landed cost-objekt) = 6 poäng

Scalar fields (id, name, currency) är gratis.

Exempel: query med flera objekt

1{
2 orders(first: 10, filter: { status: COMPLETED }) {
3 edges {
4 cursor
5 node {
6 id
7 }
8 }
9 }
10}

Kostnadsfördelning: 5 (basquery) + 10 (10 orders × 1 poäng vardera) = 15 poäng

Exempel: mutation

1mutation {
2 landedCostCalculate(input: { ... }) {
3 id
4 }
5}

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:

1zonos-query-complexity: 58

Den 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:

1{
2 landedCost(id: "landed_cost_123") {
3 id
4 createdAt
5 }
6 order(orderId: "order_123") {
7 id
8 status
9 createdAt
10 }
11}

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.

1query {
2 order(orderId: "order_123") {
3 id
4 status
5 createdAt
6 updatedAt
7 items {
8 id
9 name
10 quantity
11 amount
12 }
13 shipments {
14 id
15 }
16 }
17}

Paginerera stora dataset

Vid flera objekt använder ni rimliga sidstorlekar:

1{
2 orders(first: 100, filter: { status: COMPLETED }) {
3 edges {
4 cursor
5 node {
6 id
7 }
8 }
9 }
10}

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.

Boka en demo

Var den här sidan till hjälp?