GraphQL queries begin from root types: query
, mutation
, and subscription
.
Attach these to your schema using methods with the same name:
class MySchema < GraphQL::Schema
# required
query Types::QueryType
# optional
mutation Types::MutationType
subscription Types::SubscriptionType
end
The types are GraphQL::Schema::Object
classes, for example:
# app/graphql/types/query_type.rb
class Types::QueryType < GraphQL::Schema::Object
field :all_posts, [PostType], 'Returns all blog posts', null: false
end
# Similarly:
class Types::MutationType < GraphQL::Schema::Object
field :create_post, mutation: Mutations::AddPost
end
# and
class Types::SubscriptionType < GraphQL::Schema::Object
field :comment_added, subscription: Subscriptions::CommentAdded
end
Each type is the entry point for the corresponding GraphQL query:
query GetPost {
# `Query.post`
post(id: 1) { ... }
}
mutation AddPost($postAttrs: PostInput!){
# `Mutation.createPost`
createPost(attrs: $postAttrs)
}
subscription CommentAdded {
# `Subscription.commentAdded`
commentAdded(postId: 1)
}