⚠ New Class-Based API ⚠

This describes a new API in v1.8.0. Check the upgrade notes for more info.

Mutation Root

GraphQL mutations all begin with the mutation keyword:

mutation($accountNumber: ID!, $newBalance: Int!) {
# ^^^^ here
  setAccountBalance(accountNumber: $accountNumber, newBalance: $newBalance) {
    # ...
  }
}

Operations that begin with mutation get special treatment by the GraphQL runtime: root fields are guaranteed to be executed sequentially. This way, the effect of a series of mutations is predictable.

Mutations are executed by a specific GraphQL object, Mutation. This object is defined like any other GraphQL object:

class Types::Mutation < Types::BaseObject
  # ...
end

Then, it must be attached to your schema with the mutation(...) configuration:

class Schema < GraphQL::Schema
  # ...
  mutation(Types::Mutation)
end

Now, whenever an incoming request uses the mutation keyword, it will go to Mutation.

See Mutation Classes for some helpers to define mutation fields.