Persisted queries for Django GraphQL
Project description
Persisted queries for Django GraphQL
Dependencies
Django ≥ 1.11
Python ≥ 3.4
Installation
Install last stable version from Pypi.
pip install django-graphql-persist
Include the PersistMiddleware middleware in your MIDDLEWARE settings:
MIDDLEWARE = [
...
'graphql_persist.middleware.PersistMiddleware',
...
]
Loaders
Django-graphql-persist searches for documents directories in a number of places, depending on your DEFAULT_LOADER_CLASSES variable.
AppDirectoriesLoader
Loads documents from Django apps on the filesystem. For each app in INSTALLED_APPS, the loader looks for a documents/ subdirectory defined by APP_DOCUMENT_DIR variable.
FilesystemLoader
Loads documents from the filesystem, according to DOCUMENTS_DIRS variable.
URLLoader
Loads documents from urls, according to DOCUMENTS_DIRS.
GRAPHQL_PERSIST = {
'DOCUMENTS_DIRS': [
'/app/documents', # FilesystemLoader
'https:// ... /documents', # URLLoader
],
}
Schema definition
You can split schemas into separate files…
/app/documents/fragments.graphql
fragment userFields on UserType {
id
email
}
and define Pythonic imports prefixed with #.
/app/documents/schema.graphql
# from fragments import userFields
query GetViewer {
viewer {
...userFields
}
}
query GetUsers {
users {
...userFields
}
}
Query by id
{
"id": "schema",
"operationName": "GetViewer",
"variables": {}
}
Operations definition
/app/documents/GetViewer.graphql
# from fragments import userFields
query GetViewer {
viewer {
...userFields
}
}
Query by operationName
{
"operationName": "GetViewer",
"variables": {}
}
👉 Versioning
The versioning scheme is defined by the DEFAULT_VERSIONING_CLASS setting variable.
GRAPHQL_PERSIST = {
'DEFAULT_VERSIONING_CLASS': 'graphql_persist.versioning.AcceptHeaderVersioning'
}
This is the full list of versioning classes.
DEFAULT_VERSIONING_CLASS |
Example |
---|---|
AcceptHeaderVersioning |
application/json; version=v1 |
VendorTreeVersioning |
application/vnd.flavors.v1+json |
QueryParameterVersioning |
?version=v1 |
HostNameVersioning |
v1.flavors.com |
Configure the versioning scheme and storage the GraphQL documents according to the version.
👇 Example
POST /graphql HTTP/1.1
Accept: application/json; version=v1.full
{
"operationName": "GetViewer",
"variables": {}
}
documents/
|
├── v1/
│ ├── full/
│ | └── GetViewer.graphql 👈
│ └── basic/
| | └── GetViewer.graphql
| └── fragments/
| └── common.graphql
└── v2/
└── full/
└── basic/
Settings
Here’s a list of settings available in Django-graphql-persist and their default values.
DOCUMENTS_DIRS
List of directories or urls searched for GraphQL SDL definitions Default: ()
CACHE_NAME
Cache key name `CACHES[name]` to cache the queries results Default: 'default'
QUERY_KEY_HANDLER
A custom function `f(query_id, request)` to generate the persisted query keys Default: 'graphql_persist.query.query_key_handler'
DEFAULT_VERSIONING_CLASS
A versioning class to determine the `request.version` attribute Default: None
DEFAULT_LOADER_ENGINE_CLASS
Class that takes a list of template loaders and attempts to load templates from them in order Default: 'graphql_persist.loaders.Engine' Note: Set variable to 'graphql_persist.loaders.CachedEngine' for caching documents
DEFAULT_LOADER_CLASSES
A list of loader classes to import documents from a particular source Default: ( 'graphql_persist.loaders.AppDirectoriesLoader', 'graphql_persist.loaders.FilesystemLoader', 'graphql_persist.loaders.URLLoader', )
APP_DOCUMENT_DIR
Subdirectory of installed applications for searches documents Default: 'documents'
DOCUMENTS_EXT
GraphQL document file extension Default: '.graphql'
DEFAULT_RENDERER_CLASSES
A list of renderer classes that may be used when returning a persisted query response Default: ()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django-graphql-persist-0.0.1.dev3.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb76d825cde02932aa0244fbab522d86274a721967402b0b812406d1a8111d1b |
|
MD5 | 9986fd49632ea6e3c15b5a0944bfe4ad |
|
BLAKE2b-256 | 63e291b4fa2743e4ff9e533a65deaff71ad66599a0d09a9756f03a41fcc477ed |
Hashes for django_graphql_persist-0.0.1.dev3-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ac8eb0364455c154fde09f3d56c4bf11b2e5e8cdcd647b021db4afea401a7e3e |
|
MD5 | 5be5f376f01740d0ed8f19faca3cf461 |
|
BLAKE2b-256 | 807c9b316db1ebfd6bf6286a26e7ba9487a641e4fb022d749eebd439dc11cebd |