woohaaha

woohaaha

Absinthe GraphQL viewer/me pattern

There is a pattern in GraphQL called viewer. Using the example in the Absinthe book the me is the root viewer:

{
  me {
    orders {
      id
      items { 
        name
        quantity
      }
    }
  }
    menuItems {
    name 
  }
}

It is still not so clear to me how to implement this. I did some searching online as well and couldn’t find any examples.

Does anyone have any examples of how to implement the root viewer pattern with absinthe?

Thank you

Most Liked Switch mode

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

I can’t say I have much insight into the ex-Facebook crowd. I think whether or not me is a useful pattern depends a bit on how you do authentication and authorization in your application. If you have entities owned by the current user then I definitely think it makes sense to scope it under that. It gets a bit trickier if you’re using role based authentication and authorization is less about “me” and more about “the role I want to use for this request”.

You can also find minor inconsistencies between the me pattern and the node pattern. I absolutely adore the node field pattern because it saves you from redundantly setting up hundreds of “get this entity” fields. However it’s { node(id: $id) { ... Fields } } not { me { node() } }, but of course the permissions you have will affect whether or not you can access it.

Really though I think the decline of me or viewer is less about it not being a good idea, and more about the ex-Facebook crowd wanting to distance themselves from a dogma which made it a required pattern. Early versions of Relay (Facebook’s client) were exceptionally dogmatic with respect to how the schema needed to be organized, and it has tried to become more flexible over time.

I suppose where that is leaving me is this: I think me is a valuable pattern for accessing user specific data. I do not necessarily think that it is the most consistent pattern for acting as the primary entrypoint to the rest of the graph. However if that’s the route you want to go I think there can still be real upsides, so it’s a judgement call you’ll have to make.

Where Next?

Trending in Questions Top

jonnycharles
I’m in search of an Elixir library that offers PDF generation capabilities similar to Ruby’s Prawn. While there have been discussions abo...
New
spammy
I’m looking to build a personal workflow to quickly deploy web applications written in elixir/phoenix, for local consumption (ie not on t...
New
silverdr
Using Phoenix.LiveView.TagEngine as an EEx.Engine is deprecated! To compile HEEx, use Phoenix.LiveView.TagEngine.compile/2 instead. Sta...
New
saveman71
Hello ! We want new/edit form pages to POST/PUT to their own URL rather than the resources REST defaults (post /things, put /things/:id)...
New
dli
Before I dive in myself, did anyone successfully sprinkle Hologram into their existing LiveView app? Looking for hints regarding: Addi...
New
bottlenecked
Hi all, I wanted to ask how the community is dealing with post-release steps. Today we have Ecto migrations, which make sure that the db...
New
michallepicki
I am using Oban and occasionally, shortly after a deployment, a handful of jobs can fail because of dependency on other parts of the syst...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New
type1fool
I just stumbled on a newly redesigned elixir-lang.org. :tada: It looks like @Software_Mansion did the work, and I think it is generally a...
New
akoutmos
@hugobarauna and I (Alex Koutmos) have been hard at work on writing a book on Nerves that takes you from simply blinking LEDs to building...
New

We're in Beta

About us Mission Statement