graphql-utilities tries to secure your GraphQL API from malicious queries and provides utilities to make using graphql-core
easier.
-
It comes with a custom configurable
ExtendedExecutionContext
class that is capable of performing:- query cost analysis: define the cost of your queries using the
@cost()
directive provided,graphql-utilities
provides helper functions and custom execution context to protect you from overly complex queries. - depth limiting: limit the maximum depth of queries, it's especially useful with object types with recursive relationship
- query cost analysis: define the cost of your queries using the
-
It also ships decorators for:
- resource-level/one-shot middleware: middleware in
graphql-core
is run at field-level, it is handly when you need your middleware to run only once, especially auth-related middleware.
- resource-level/one-shot middleware: middleware in
pip install graphql-utilities
Alternatively, if you use pipenv:
pipenv install graphql-utilities
from graphql_utilities.decorators import run_only_once
class AuthMiddleware:
@run_only_once
def resolve(self, next_, root, info, *args, **kwargs):
# middleware logic
return next_(root, info, *args, **kwargs)
# import your schema
from graphql import execute, parse # Requires `graphql-core>=3.0`
from graphql_utilities.execution import ExtendedExecutionContext
query = '{ field_1_str field_2_int field_3_obj { field_3_obj_sub_1 { xxx } } }'
graphql_sync(schema=schema, source=query,
context_value={"depth_analysis": {
"max_depth": 2 # Maximum depth allowed
}},
execution_context_class=ExtendedExecutionContext # Use the `ExtendedExecutionContext` provided in `graphql-utilities`
)
See the documentation at https://graphql-utilities.readthedocs.io/en/latest/
In recent projects, I ran into some problems with graphene
and graphql-core
including missing operation-level middleware (See issue here), etc.
graphql-utilities
is a compilation of utilities and custom execution context for depth analysis, etc targeting graphql-core>=3.0
.
Any form of contribution, feature requests, bug reports, pull requests are largely welcome.
MIT Licensed. GraphQL logo is licensed under Facebook BSD.