DOCS

GraphQL API rate limiting

GraphQL API rate limiting

Leer hoe Zonos querykosten berekent op basis van complexiteit.

Zonos rate-limit GraphQL API-verzoeken op basis van querycomplexiteit in plaats van requestaantal. Zo blijft gebruik eerlijk terwijl u precies de data opvraagt die u nodig hebt.

Waarom complexity-based rate limiting? 

Traditionele REST API's gebruiken request-based rate limiting waarbij elk verzoek dezelfde credits kost, of u nu één veld of honderden ophaalt en of u leest of wijzigt — ondanks het grote verschil in serverbelasting.

De query complexity-based aanpak van GraphQL lost dit op door kosten te berekenen op basis van de daadwerkelijk opgevraagde data en uitgevoerde operaties. Zo krijgt u meer flexibiliteit terwijl de serverbelasting voorspelbaar blijft.

Rate limit 

Zonos gebruikt een point-based systeem waarbij elke query punten aftrekt op basis van complexiteit. U hebt een pool beschikbare punten die:

  • Vult aan met 3.000 punten per seconde (30.000 punten per 10 seconden)
  • Een maximumcapaciteit heeft van 300.000 punten

Zo kunt u af en toe bursts van complexe queries doen terwijl u een duurzaam requesttempo behoudt.

Hoe querykosten worden berekend 

Elk GraphQL-verzoek krijgt vóór uitvoering berekende kosten:

Basiskosten

  • Query: 5 punten
  • Mutation: 10 punten
  • Object: 1 punt per geretourneerd object
  • Scalar fields: 0 punten (gratis)

Scalar fields zoals strings, integers, ID's en booleans tellen niet mee. U betaalt alleen voor de basisoperatie en de geretourneerde objecten.

Voorbeeld: eenvoudige query

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

Kostenuitsplitsing: 5 (basisquery) + 1 (landed cost object) = 6 punten

De scalar fields (id, name, currency) zijn gratis.

Voorbeeld: query met meerdere objecten

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

Kostenuitsplitsing: 5 (basisquery) + 10 (10 orders × 1 punt elk) = 15 punten

Voorbeeld: mutation

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

Kostenuitsplitsing: 10 (basismutation) + ongeveer 50 (geretourneerde objecten) = 60 punten

Een typische Landed Cost-berekening kost ongeveer 60 punten in complexiteit.

Querycomplexiteit bekijken 

Elke API-response bevat een zonos-query-complexity-header met de kosten van uw query:

1zonos-query-complexity: 58

Deze header toont precies hoeveel punten de query heeft verbruikt. Gebruik hem om API-gebruik te monitoren en dure queries te optimaliseren.

Rate limits afhandelen 

Als u uw rate limit overschrijdt, ontvangt u een foutmelding. Om rate limits effectief af te handelen:

Monitor uw complexiteit

Controleer de zonos-query-complexity-header in responses om querykosten te begrijpen en dure patronen te identificeren.

Implementeer retry-logica

Bij rate limits implementeert u exponential backoff en retry-logica. Omdat de bucket 3.000 punten per seconde vult, berekent u passende wachttijden op basis van querycomplexiteit.

Batch efficiënt

Met GraphQL kunt u meerdere queries in één verzoek opvragen:

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}

Best practices 

Vraag alleen op wat u nodig hebt

Querycomplexiteit is evenredig met de data die u opvraagt. Structureer queries zodat u alleen velden en objecten ophaalt die u echt gebruikt.

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}

Pagineer grote datasets

Bij meerdere objecten gebruikt u redelijke paginagroottes:

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

Vraag 10-50 items per keer op en pagineer door resultaten, in plaats van honderden objecten in één query.

Vermijd onnodige nesting

Elk genest object verhoogt uw complexiteit. Vraag geneste data alleen op wanneer u die nodig hebt.

Boek een demo

Was deze pagina nuttig?