Search⌘ K

Implement Callback Approach

Explore how to implement the middleware/3 callback in Absinthe for cleaner and more efficient error handling in GraphQL mutations. Learn to apply schema-wide middleware logic to reduce duplication and improve maintainability as your API grows.

We'll cover the following...

Callback approach

Every field in our mutation object so far can return Ecto changeset errors. Those resolvers would be a lot cleaner if they could use this middleware instead. If we take the macro-based approach we have covered so far, it looks like this:

mutation do
field :ready_order, :order_result do
arg :id, non_null(:id)
resolve &Resolvers.Ordering.ready_order/3
middleware Middleware.ChangesetErrors
end
field :complete_order, :order_result do
arg :id, non_null(:id)
resolve &Resolvers.Ordering.complete_order/3
middleware Middleware.ChangesetErrors
end
field :place_order, :order_result do
arg :input, non_null(:place_order_input)
resolve &Resolvers.Ordering.place_order/3
middleware Middleware.ChangesetErrors
end
field :create_menu_item, :menu_item_result do
arg :input, non_null(:menu_item_input)
resolve &Resolvers.Menu.create_item/3
middleware Middleware.ChangesetErrors
end
end

Not only does this seem like an unnecessary duplication of code, but it’s ...