The Guild LogoThe Guild Monogram

Search docs

Search icon

Products by The Guild

Products

Hive logoHive blurred logo

Hive

Schema Registry for your GraphQL Workflows

SwiftGraphQL Logo

SwiftGraphQL

GraphQL client and Code Generator.

Get Started

GraphQL Subscriptions#

SwiftGraphQL packs a fully-featured GraphQL subscription client that conforms to the GraphQL over WebSocket protocol specification.

You can use GraphQLWebSocket as a standalone client or with the query-builder or in combination with SwiftGraphQLClient.

Using WebSocketExchange#

To create a subscription request on the client, you need to use WebSocketExchange. WebSocketExchange depends on the GraphQLWebSocket client that you may further modify to suit your needs.

let http_endpoint = URL(string: "http://localhost:8080/graphql")! let ws_endpoint = URL(string: "ws://127.0.0.1:4000/graphql")! let config = GraphQLWebSocketConfiguration() config.behaviour = .lazy(closeTimeout: 60) let ws = GraphQLWebSocket( request: URLRequest(url: ws_endpoint), config: config ) let client = SwiftGraphQLClient.Client( request: URLRequest(url: http_endpoint), exchanges: [ FetchExchange(), WebSocketExchange(client: socket) ] ) let args = ExecutionArgs( query: """ subscription Counter { count(from: 10, to: 1) } """, variables: [:] ) client.subscribe(args) .sink { completion in print(completion) } receiveValue: { result in print(result) }

SwiftGraphQLClient also exposes public utility methods that let you use SwiftGraphQL query builder to make a subscription and decode responses automatically.

Using GraphQLWebSocketClient#

In case you don't want to go all-in on SwiftGraphQL, you can use just the WebSockets implementation. It doesn't depend on any other parts of the codebase and strictly follows the GraphQL over WebSocket protocol.

let ws = GraphQLWebSocket(request: API_ENDPOINT) let args = ExecutionArgs( query: """ subscription Counter { count(from: 10, to: 1) } """, variables: [:] ) client.subscribe(args) .sink { completion in print(completion) } receiveValue: { result in print(result) }

Additionally, if you import the SwiftGraphQL library and make a selection, you can also automatically encode queries and decode responses.

import SwiftGraphQL let subscription = Selection.Subscription<Int> { $0.count(from: 10, to: 1) } let ws = GraphQLWebSocket(request: API_ENDPOINT) client.subscribe(subscription) .sink { completion in print(completion) } receiveValue: { result in print(result) }