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
ExtendedExecutionContextclass that is capable of performing:- query cost analysis: define the cost of your queries using the
@cost()directive provided,graphql-utilitiesprovides 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-coreis 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-utilitiesAlternatively, if you use pipenv:
pipenv install graphql-utilitiesfrom 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.