Suscripciones GraphQL, paso a paso

Suscripciones GraphQL

Suscripciones GraphQL: cómo funcionan por la red | We.Inc

Qué son las suscripciones GraphQL, la regla de un solo campo raíz, un recorrido paso a paso por los mensajes de graphql-ws, la opción SSE y cuándo el polling es mejor opción.

Una suscripción GraphQL es una operación de larga duración: el cliente envía una vez un documento de suscripción y el servidor envía un resultado nuevo cada vez que ocurre el evento correspondiente. GraphQL no fija el transporte. En la práctica funciona sobre WebSockets, con el protocolo graphql-ws, o sobre Server-Sent Events. Cada operación de suscripción debe seleccionar exactamente un campo raíz.

Suscripciones, polling y volver a consultar

El reproductor de abajo muestra una suscripción sobre el protocolo graphql-ws, mensaje a mensaje. Cada paso enseña el frame JSON que cruza el socket y qué lado lo envía, desde el primer handshake hasta el complete final.

Preguntas frecuentes

¿Por qué solo un campo raíz por suscripción?

Cada suscripción corresponde a un flujo de eventos. graphql.org muestra que poner dos campos raíz en una sola operación de suscripción no es válido; escribe dos suscripciones con nombre en su lugar.

¿Qué subprotocolo WebSocket usa graphql-ws?

Negocia graphql-transport-ws durante el handshake, con tipos de frame como connection_init, subscribe, next y complete. Otras bibliotecas WebSocket de GraphQL pueden usar un protocolo distinto, así que comprueba que cliente y servidor coinciden antes de depurar cualquier otra cosa.

¿Pueden funcionar las suscripciones sin WebSockets?

Sí. El protocolo graphql-sse envía cada resultado como un Server-Sent Event llamado next y termina con complete. Funciona sobre HTTP normal, lo que ayuda detrás de proxies que bloquean los upgrades a WebSocket.

¿Las suscripciones escalan como las consultas?

No. graphql.org señala que cada cliente suscrito queda ligado a una instancia del servidor y necesita estado durante toda su vida, así que también necesitas un sistema pub/sub para repartir los eventos entre servidores.

Qué ocurre cuando te suscribes

El protocolo graphql-ws en resumen

Cuándo el polling es mejor opción

Esquema y código del cliente

Declarar un campo de suscripción

Subscription es un tipo raíz como Query y Mutation. Cada campo es un flujo que un cliente puede abrir.

Suscribirse con el cliente de graphql-ws

createClient abre el socket de forma diferida, e iterate devuelve un iterador asíncrono que produce un resultado por evento.

La regla de un solo campo raíz

Separa dos flujos en dos operaciones

Una sola suscripción que incluya reviewCreated y otro campo raíz falla la validación. Dos operaciones con nombre sí funcionan.

El cliente envía connection_init

Se envía justo después de abrir el socket. El payload es libre; los servidores suelen leer un token de él.

El servidor envía connection_ack

El servidor aceptó la conexión. Antes de esto, un frame subscribe cerraría el socket con 4401 Unauthorized.

El cliente envía subscribe

El id lo elige el cliente y debe ser único entre sus operaciones en curso. El payload es la consulta y las variables de siempre.

El servidor envía next

Se publicó una reseña, así que el servidor ejecutó el conjunto de selección y envió el resultado con el mismo id.

El servidor vuelve a enviar next

Otro evento, otro frame. Esto se repite mientras la suscripción siga abierta.

El cliente envía complete

El usuario salió de la página, así que el cliente detiene la operación. El socket puede seguir abierto para otras suscripciones.

Una suscripción, frame a frame

Atrás

Siguiente

Reiniciar

Paso {n} de {v}

Frame en el socket

Copiar frame

Todos los pasos

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio