Strawberry comes with a basic Sanic integration. It provides a view that you can use to serve your GraphQL schema:
GraphQLView accepts two options at the moment:
schema: mandatory, the schema created by
graphql_ide: optional, defaults to
"graphiql", allows to choose the GraphQL IDE interface (one of
pathfinder) or to disable it by passing
allow_queries_via_get: optional, defaults to
True, whether to enable queries via
def encode_json(self, data: GraphQLHTTPResponse) -> str
Extending the view
GraphQLView class can be extended by overriding the following
async get_context(self, request: Request, response: Response) -> Any
async get_root_value(self, request: Request) -> Any
async process_result(self, result: ExecutionResult) -> GraphQLHTTPResponse
GraphQLView.get_context you can provide a custom context object
for your resolvers. You can return anything here; by default GraphQLView returns
a dictionary with the request.
Here we are returning a custom context dictionary that contains only one item
Then we can use the context in a resolver. In this case the resolver will return
GraphQLView.get_root_value you can provide a custom root value
for your schema. This is probably not used a lot but it might be useful in
Here’s an example:
Here we configure a Query where requesting the
name field will return
"Patrick" through the custom root value.
GraphQLView.process_result you can customize and/or process
results before they are sent to a client. This can be useful for logging errors,
or even hiding them (for example to hide internal exceptions).
It needs to return an object of
GraphQLHTTPResponse and accepts the execution
In this case we are doing the default processing of the result, but it can be tweaked based on your needs.
encode_json allows to customize the encoding of the JSON response. By default
json.dumps but you can override this method to use a different encoder.