# Apq

[![Build Status](]( [![Hex pm](]( [![Hex Docs](]( [![License](](

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"}

## Examples

Define a new module and `use Apq.DocumentProvider`:

    defmodule ApqExample.Apq do
      use Apq.DocumentProvider, cache_provider: ApqExample.Cache

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)

      def put(hash, query) do
        Cachex.put(:apq_cache, hash, query)

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.

      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 [](