AIOHTTPWebsocketsTransport
The AIOHTTPWebsocketsTransport is an alternative to the WebsocketsTransport, using the aiohttp dependency instead of the websockets dependency.
It also supports both:
It will propose both subprotocols to the backend and detect the supported protocol from the response http headers returned by the backend.
Note
For some backends (graphql-ws before version 5.6.1 without backwards compatibility), it may be necessary to specify
only one subprotocol to the backend. It can be done by using
subprotocols=[AIOHTTPWebsocketsTransport.GRAPHQLWS_SUBPROTOCOL]
or subprotocols=[AIOHTTPWebsocketsTransport.APOLLO_SUBPROTOCOL]
in the transport arguments.
This transport allows to do multiple queries, mutations and subscriptions on the same websocket connection.
Reference: gql.transport.aiohttp_websockets.AIOHTTPWebsocketsTransport
import asyncio
import logging
from gql import Client, gql
from gql.transport.aiohttp_websockets import AIOHTTPWebsocketsTransport
logging.basicConfig(level=logging.INFO)
async def main():
transport = AIOHTTPWebsocketsTransport(
url="wss://countries.trevorblades.com/graphql"
)
# Using `async with` on the client will start a connection on the transport
# and provide a `session` variable to execute queries on this connection
async with Client(
transport=transport,
) as session:
# Execute single query
query = gql(
"""
query getContinents {
continents {
code
name
}
}
"""
)
result = await session.execute(query)
print(result)
# Request subscription
subscription = gql(
"""
subscription {
somethingChanged {
id
}
}
"""
)
async for result in session.subscribe(subscription):
print(result)
asyncio.run(main())