A Kong Plugin For GraphQL Caching And Whitelisting That Uses GoQL.
If you have already had docker, docker compose, make and deck then run
make run or make run_bg.
You can sync kong gateway via given rules in kong.yaml with running
deck synccurl --location 'http://localhost:8000/graphql' \
--header 'apikey: PxF0TCBvNhytUHbmP73cPJ5OZi54Rpgq' \
--header 'Content-Type: application/json' \
--data '{"query":"query getCountries {\n countries {\n code \n name \n capital \n languages {\n name\n }\n }\n}","variables":{}}'If you change the query name which not in whitelists table then you can receive 403 status code with Query not allowed message.
curl --location 'http://localhost:8000/graphql' \
--header 'apikey: PxF0TCBvNhytUHbmP73cPJ5OZi54Rpgq' \
--header 'Content-Type: application/json' \
--data '{"query":"query notExistsQuery {\n countries {\n code \n name \n capital \n languages {\n name\n }\n }\n}","variables":{}}'make stop or make stop_all.
Initialization for GoQL is done in goql.go.
There are 2 global variables called whitelister and cacher which will be used in Access and Responsephases.
To use GraphQL caching, you have to create goql.Cacher with using UseGQLCacher function.
🚨 Cache configuration is mandatory to use this feature. So you have to call ConfigureCache function first.
There are few different type of cache options by GoQL. You can specify it while configuring cache.
To use Whitelisting, you have to create goql.Whitelister with using UseWhitelister function.
🚨 Cache & DB configurations are mandatory to use this feature. So you have to call ConfigureCache and ConfigureDB functions first.
🚨 Whitelister looks for a table called whitelists under schema goql. So you have to migrate database. 000001 and 000002 migrations are mandatory. Also migration files can be used to add new whitelist row as seen 00003.
There are few different type of cache and database options by GoQL. You can specify it while configuring cache and database.
This repository has end-to-end implementation of goql-plugin for Kong Gateway.
You can copy & paste the repository if you have not got a Kong Gateway yet. Otherwise, you can copy goql-plugin to your gateway repository directly.
🚨 Don't forget to add build steps inside Dockerfile and environment variables