GraphQL Queries and Mutations

The fields of the top-level types Query and Mutation are usually used as endpoints for requests, much like REST API endpoints.

To make defining these endpoints easier the top-level fields are defined alongside their resolvers.

@Query('posts(offset: Int = 0, limit: Int = 25): [Post]', PostTypeDefs)
export class PostsQuery implements IResolver
{
    public handle(source, {offset, limit}, context, info): Array<Post>
    {
        return posts.slice(offset, offset + limit);
    }
}

@Mutation('postCreate(author: ID, text: String): Post', PostTypeDefs)
export class PostCreateMutation implements IResolver
{
    public handle(source, {author, text}, context, info): Post
    {
        const post: Post = {
            author,
            text,
            date: new Date(),
        };
        posts.push(post);
        return post;
    }
}

Both @Query and @Mutation take the field definition as the first parameter and type defs as the second parameter.

Previous article

Resolvers

Next article

Subscriptions