Apq
Support for Automatic Persisted Queries in Absinthe.
Installation
If available in Hex, the package can be installed
by adding apq
to your list of dependencies in mix.exs
:
def deps do
[
{:apq, "~> 1.0.0"}
]
end
Examples
Define a new module and use Apq.DocumentProvider
:
defmodule ApqExample.Apq do
use Apq.DocumentProvider, cache_provider: ApqExample.Cache
end
You’ll need to implement a cache provider. This is up to you, in this example I use Cachex but you could use a Genserver, Redis or anything else.
Define a module for the cache, e.g when using Cachex:
defmodule ApqExample.Cache do
@behaviour Apq.CacheProvider
def get(hash) do
Cachex.get(:apq_cache, hash)
end
def put(hash, query) do
Cachex.put(:apq_cache, hash, query)
end
end
When using Cachex you’ll need to start it in your supervision tree:
worker(Cachex, [ :apq_cache, [ limit: 100 ] ])
Now we need to add the ApqExample.Apq
module to the list of document providers.
match("/api",
to: Absinthe.Plug,
init_opts: [
schema: ApqExample.Schema,
json_codec: Jason,
interface: :playground,
document_providers: [ApqExample.Apq, Absinthe.Plug.DocumentProvider.Default]
]
)
This is it, if you query with a client that has support for Apq it should work with Absinthe.
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/apq.