DOCS

Limitación de velocidad de la API GraphQL

Limitación de velocidad de la API GraphQL

Conozca cómo Zonos calcula los costos de consulta según la complejidad.

Zonos limita las solicitudes de la API GraphQL según la complejidad de la consulta en lugar del número de solicitudes. Esto garantiza un uso equitativo y le permite solicitar exactamente los datos que necesita.

¿Por qué limitación de velocidad basada en complejidad? 

Las API REST tradicionales usan limitación de velocidad basada en solicitudes, donde cada solicitud consume los mismos créditos, ya sea que obtenga un campo o cientos, y ya sea que lea o modifique datos, a pesar de la diferencia significativa en la carga del servidor.

El enfoque de GraphQL basado en la complejidad de consulta resuelve esto calculando los costos según los datos reales solicitados y las operaciones realizadas. Esto le brinda más flexibilidad para solicitar lo que necesita y proporciona una carga de servidor predecible.

Límite de velocidad 

Zonos utiliza un sistema basado en puntos donde cada consulta deduce puntos según su complejidad. Tiene un grupo de puntos disponibles que:

  • Se recarga a 3.000 puntos por segundo (30.000 puntos por 10 segundos)
  • Tiene una capacidad máxima de 300.000 puntos

Esto le permite realizar ráfagas ocasionales de consultas complejas mientras mantiene un ritmo de solicitudes sostenible.

Cómo se calcula el costo de la consulta 

Cada solicitud GraphQL tiene un costo calculado antes de la ejecución:

Costos base

  • Query: 5 puntos
  • Mutation: 10 puntos
  • Object: 1 punto por objeto devuelto
  • Scalar fields: 0 puntos (gratis)

Los campos escalares como cadenas, enteros, ID y booleanos no agregan al costo. Solo paga por la operación base y los objetos devueltos.

Ejemplo: Consulta simple

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

Desglose de costos: 5 (consulta base) + 1 (objeto landed cost) = 6 puntos

Los campos escalares (id, name, currency) son gratis.

Ejemplo: Consulta con múltiples objetos

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

Desglose de costos: 5 (consulta base) + 10 (10 pedidos × 1 punto cada uno) = 15 puntos

Ejemplo: Mutación

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

Desglose de costos: 10 (mutación base) + aproximadamente 50 (objetos devueltos) = 60 puntos

Un cálculo típico de landed cost cuesta alrededor de 60 puntos en complejidad.

Visualización de la complejidad de consulta 

Cada respuesta de la API incluye un encabezado zonos-query-complexity que muestra el costo de su consulta:

1zonos-query-complexity: 58

Este encabezado le indica exactamente cuántos puntos consumió la consulta. Úselo para monitorear su uso de la API y optimizar consultas costosas.

Manejo de límites de velocidad 

Si excede su límite de velocidad, recibirá un mensaje de error. Para manejar los límites de velocidad de manera efectiva:

Monitoree su complejidad

Verifique el encabezado zonos-query-complexity en las respuestas para comprender los costos de sus consultas e identificar patrones costosos.

Implemente lógica de reintento

Si alcanza los límites de velocidad, implemente retroceso exponencial y lógica de reintento. Dado que el grupo se recarga a 3.000 puntos por segundo, calcule tiempos de espera apropiados según la complejidad de su consulta.

Agrupe eficientemente

GraphQL le permite solicitar múltiples consultas en una sola solicitud:

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}

Mejores prácticas 

Solicite solo lo que necesita

La complejidad de la consulta es proporcional a los datos que solicita. Estructure sus consultas para obtener solo los campos y objetos que realmente utilizará.

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}

Pagine conjuntos de datos grandes

Al solicitar múltiples objetos, use tamaños de página razonables:

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

Solicite de 10 a 50 elementos a la vez y pagine los resultados según sea necesario, en lugar de solicitar cientos de objetos en una sola consulta.

Evite anidamiento innecesario

Cada objeto anidado agrega a su complejidad. Solo solicite datos anidados cuando realmente los necesite.

¿Fue útil esta página?