I’ve used Automated Persistent Queries in Apollo Server before and it was a sizeable performance boost (combined with leveraging CDN).
Is this available out of the box in Absinthe? It doesn’t seem so from the docs. Has perhaps anyone attempted to do this with Absinthe?
1 Like
Wrote a library a long time ago to handle this apq | Hex
Should still work if nothing in the apq spec has changed
1 Like
I love that I have no idea what this even is and yet there’s a library that makes work! 
5 Likes
Incredible! Thx for the prompt reply.
1 Like
Just wanted to give a shout out!! I recently used the library with a project and it works great!
However, I am at Elixir 1.18 and this has built in JSON
module which should replace Jason
. I noticed this module is not loaded automatically with just setting json_codec: JSON
iex(1)> Kernel.function_exported?(JSON, :decode!, 1)
false
iex(4)> Code.ensure_loaded(JSON)
{:module, JSON}
iex(5)> Kernel.function_exported?(JSON, :decode!, 1)
true
It works after I manually load the module otherwise gives this error -
** (exit) an exception was raised:
** (RuntimeError) json_codec must be specified and respond to decode!/1
(apq 2.0.1) lib/apq/document_provider.ex:190: Apq.DocumentProvider.format_params/2
(apq 2.0.1) lib/apq/document_provider.ex:102: Apq.DocumentProvider.process/2
(absinthe_plug 1.5.8) lib/absinthe/plug/document_provider.ex:72: anonymous fn/2 in Absinthe.Plug.DocumentProvider.process/2
(elixir 1.18.0) lib/enum.ex:4964: Enumerable.List.reduce/3
(elixir 1.18.0) lib/enum.ex:2600: Enum.reduce_while/3
(absinthe_plug 1.5.8) lib/absinthe/plug/request.ex:96: Absinthe.Plug.Request.build_request/4
(absinthe_plug 1.5.8) lib/absinthe/plug/request.ex:52: Absinthe.Plug.Request.parse/2
(absinthe_plug 1.5.8) lib/absinthe/plug.ex:451: Absinthe.Plug.execute/2
(absinthe_plug 1.5.8) lib/absinthe/plug.ex:290: Absinthe.Plug.call/2
(phoenix 1.6.16) lib/phoenix/router/route.ex:41: Phoenix.Router.Route.call/2
Is this something that should be taken care of in application or the library?
1 Like
Quite interesting, I reproduced the same. Wonder what the solution to that would be.
1 Like
I don’t know why it doesn’t work, PR’s welcome!
Now that JSON is included, I think a change to make it the default but still allow an override could also be an improvement. A new release 3.0 would be in order then.
1 Like