Skip to content

Add graphql-transport-ws subprotocol handler#40

Open
mordhaus wants to merge 2 commits intograph-gophers:masterfrom
mordhaus:feature/add-transport-protocol-handler
Open

Add graphql-transport-ws subprotocol handler#40
mordhaus wants to merge 2 commits intograph-gophers:masterfrom
mordhaus:feature/add-transport-protocol-handler

Conversation

@mordhaus
Copy link

@mordhaus mordhaus commented Oct 30, 2025

Introduces the transport package to handle the GraphQL over
WebSocket protocol. This abstracts the underlying communication layer
from core service logic, decoupling network I/O from business
operations.

The package manages the connection lifecycle, message serialization, and
graceful shutdowns. This improves testability by allowing the transport
to be mocked and provides a clear separation of concerns.

Changes:

  • Added a new shared GraphQL subscription interface.
  • Added Connect function to manage the connection lifecycle.
  • Implemented readLoop and writeLoop for handling messages.
  • Added support for GraphQL-WS protocol messages (e..g, subscribe,
    next, complete).
  • Implemented operationMap for managing active subscriptions.
  • Created mock connection and service for comprehensive unit tests.

This pull request refactors how the websocket subprotocol is handled.

Previously, the code iterated through the Sec-WebSocket-Protocol
header to find a supported protocol. This change removes that manual
iteration and relies on the websocket upgrader (e.g.,
gorilla/websocket) to correctly negotiate and select the subprotocol
from the list provided by the client.

The handler logic has been moved into a dispatcher, which makes it
easier to extend the codebase with support for additional subprotocols
in the future, such as the newer graphql-transport-ws protocol (as
mentioned in issue graph-gophers#38).

Changes:
- Removed the manual for loop that iterated over websocket
subprotocols.
- Delegated subprotocol detection to the websocket upgrader.
- Introduced a dispatcher to route connections based on the negotiated
subprotocol.
- This change is foundational for adding support for the
graphql-transport-ws subprotocol.
@mordhaus mordhaus force-pushed the feature/add-transport-protocol-handler branch from 9c6be08 to 911efd7 Compare November 4, 2025 06:16
@mordhaus mordhaus changed the title Add transport package for WebSocket GraphQL Add graphql-transport-ws subprotocol handler Nov 4, 2025
@mordhaus mordhaus force-pushed the feature/add-transport-protocol-handler branch from 911efd7 to 9474a90 Compare November 4, 2025 06:18
Introduces the transport package to handle the GraphQL over
WebSocket protocol. This abstracts the underlying communication layer
from core service logic, decoupling network I/O from business
operations.

The package manages the connection lifecycle, message serialization, and
graceful shutdowns. This improves testability by allowing the transport
to be mocked and provides a clear separation of concerns.

Changes:

- Added a new shared GraphQL subscription interface.
- Added Connect function to manage the connection lifecycle.
- Implemented readLoop and writeLoop for handling messages.
- Added support for GraphQL-WS protocol messages (e..g, subscribe,
  next, complete).
- Implemented operationMap for managing active subscriptions.
- Created mock connection and service for comprehensive unit tests.
@mordhaus mordhaus force-pushed the feature/add-transport-protocol-handler branch from 9474a90 to 7e036e7 Compare November 4, 2025 06:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant