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
query { landedCost(id: "123") { id createdBy shipToCountry }}Kostenuitsplitsing: 5 (basisquery) + 1 (landed cost object) = 6 punten
De scalar fields (id, name, currency) zijn gratis.
Voorbeeld: query met meerdere objecten
{ orders(first: 10, filter: { status: COMPLETED }) { edges { cursor node { id } } }}Kostenuitsplitsing: 5 (basisquery) + 10 (10 orders × 1 punt elk) = 15 punten
Voorbeeld: mutation
mutation { landedCostCalculate(input: { ... }) { id }}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:
zonos-query-complexity: 58Deze 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:
{ landedCost(id: "landed_cost_123") { id createdAt } order(orderId: "order_123") { id status createdAt }}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.
query { order(orderId: "order_123") { id status createdAt updatedAt items { id name quantity amount } shipments { id } }}Pagineer grote datasets
Bij meerdere objecten gebruikt u redelijke paginagroottes:
{ orders(first: 100, filter: { status: COMPLETED }) { edges { cursor node { id } } }}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.
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.