Hello,
I’ve written a GraphQL server with Absinthe as a proof of concept and a prototype for the next project.
I found some samples, Absinthe Tutorial Codel for example, and those were good start as the first step, but the learning curve would be too steep when you want to implement some logics, such as avoiding an N+1 problem with dataloader, authorizing users, injecting some values into the result returned from dataloader, etc.
You can get the source code and some description about it here: absinthe_showcase
Features
-
Battery included
- You can soon try in Docker Compose.
-
Written in the latest libraries:
- OTP 21, Elixir 1.7.4
- Phoenix 1.4, Ecto 3.0
- Absinthe 1.4.13
-
Avoiding N+1 problem with dataloader
-
Authorizing user permission with a custom middleware
-
Count the number of records regardless of LIMIT/OFFSET specified, which is very useful in pagination
-
Supports multistage query such as
{questions{users{} answers{}}}
,{me {users{} questions{} answers{}}}
,{questions{answers{users{}}}}
, etc. -
Various queries/mutations
- mutations
- login with email and password; supports two permissions
- normal user
- admin user
- create user account
- the only admin user can create new accounts
- guests(no login user) or normal users are rejected
- login with email and password; supports two permissions
- query
- various queries includes total record counts
- mutations
Feedback welcome!
This is the first time I’ve written an application with Absinthe. Any suggestions for improving this application, even the mistakes you find in my English, are welcome.