Extensions¶
Request extensions¶
The GraphQL over HTTP spec
defines an optional extensions field on requests. This is sent as a
top-level key in the request payload alongside query, variables,
and operationName.
You can use this to pass protocol extensions such as trusted documents:
from gql import Client, GraphQLRequest
from gql.transport.aiohttp import AIOHTTPTransport
transport = AIOHTTPTransport(url="https://example.com/graphql")
async with Client(transport=transport) as session:
request = GraphQLRequest(
"query { viewer { name } }",
extensions={
"document-id": "155d6e8f5545...",
},
)
result = await session.execute(request)
Response extensions¶
When you execute (or subscribe) GraphQL requests, the server will send responses which may have 3 fields:
data: the serialized response from the backend
errors: a list of potential errors
extensions: an optional field for additional data
If there are errors in the response, then the
execute or subscribe methods will
raise a TransportQueryError.
If no errors are present, then only the data from the response is returned by default.
result = client.execute(query)
# result is here the content of the data field
If you need to receive the extensions data too, then you can run the
execute or subscribe methods with get_execution_result=True.
In that case, the full execution result is returned and you can have access to the extensions field
result = client.execute(query, get_execution_result=True)
# result is here an ExecutionResult instance
# result.data is the content of the data field
# result.extensions is the content of the extensions field