GraphQL-subscriptions, stap voor stap

GraphQL-subscriptions

GraphQL-subscriptions: hoe ze over de lijn werken | We.Inc

Wat GraphQL-subscriptions zijn, de regel van één root field, een stapsgewijze doorloop van de graphql-ws-berichten, de SSE-optie, en wanneer polling de betere keuze is.

Een GraphQL-subscription is een langlopende operatie: de client stuurt één keer een subscription-document, en de server pusht een nieuw resultaat telkens wanneer het bijbehorende event plaatsvindt. GraphQL legt het transport niet vast. In de praktijk draait het over WebSockets, met het graphql-ws-protocol, of over Server-Sent Events. Elke subscription-operatie moet precies één root field selecteren.

Subscriptions, polling en opnieuw ophalen

De stepper hieronder speelt één subscription af over het graphql-ws-protocol, bericht voor bericht. Elke stap toont het JSON-frame dat over de socket gaat en welke kant het verstuurt, van de eerste handshake tot de laatste complete.

Veelgestelde vragen

Waarom maar één root field per subscription?

Elke subscription hoort bij één stroom van events. graphql.org laat zien dat twee root fields in één subscription-operatie ongeldig is; schrijf in plaats daarvan twee subscriptions met een naam.

Welk WebSocket-subprotocol gebruikt graphql-ws?

Het onderhandelt graphql-transport-ws tijdens de handshake, met frametypes zoals connection_init, subscribe, next en complete. Andere GraphQL-WebSocket-libraries gebruiken mogelijk een ander protocol, dus controleer of client en server het eens zijn voordat u iets anders gaat debuggen.

Kunnen subscriptions zonder WebSockets draaien?

Ja. Het graphql-sse-protocol stuurt elk resultaat als een Server-Sent Event met de naam next en eindigt met complete. Het werkt over gewone HTTP, wat helpt achter proxy's die WebSocket-upgrades blokkeren.

Schalen subscriptions zoals queries?

Nee. graphql.org wijst erop dat elke geabonneerde client aan een serverinstantie vastzit en state nodig heeft zolang hij bestaat, dus u hebt ook een pub/sub-systeem nodig om events over servers te verspreiden.

Wat er gebeurt als u subscribet

Het graphql-ws-protocol in het kort

Wanneer polling de betere keuze is

Schema en clientcode

Een subscription-veld declareren

Subscription is een root type zoals Query en Mutation. Elk veld is één stroom die een client kan openen.

Subscriben met de graphql-ws-client

createClient opent de socket pas wanneer nodig, en iterate geeft een async iterator terug die één resultaat per event oplevert.

De regel van één root field

Splits twee stromen in twee operaties

Een enkele subscription met reviewCreated en nog een root field faalt bij validatie. Twee operaties met een naam werken wel.

Client stuurt connection_init

Direct verstuurd nadat de socket opent. De payload is vrij van vorm; servers lezen er vaak een token uit.

Server stuurt connection_ack

De server heeft de verbinding geaccepteerd. Daarvoor zou een subscribe-frame de socket sluiten met 4401 Unauthorized.

Client stuurt subscribe

Het id wordt door de client gekozen en moet uniek zijn onder zijn lopende operaties. De payload is de gebruikelijke query met variables.

Server stuurt next

Er is een review geplaatst, dus de server voerde de selection set uit en stuurde het resultaat onder hetzelfde id.

Server stuurt opnieuw next

Nog een event, nog een frame. Dit herhaalt zich zolang de subscription open blijft.

Client stuurt complete

De gebruiker verliet de pagina, dus de client stopt de operatie. De socket kan open blijven voor andere subscriptions.

Eén subscription, frame voor frame

Terug

Volgende

Opnieuw beginnen

Stap {n} van {v}

Frame op de socket

Frame kopiëren

Alle stappen

Gratis beginnen · Geen creditcard nodig

Gerelateerd: Gidsen

Product

Voor wie

Functies

Bronnen

Bedrijf

Sitemap