Bird
Raised Fist0
GraphQLquery~10 mins

Resolver organization in GraphQL - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define a resolver for the Query type that returns a list of users.

GraphQL
const resolvers = {
  Query: {
    users: () => [1]
  }
};
Drag options to blanks, or click blank then click option'
Aundefined
B'users'
Cnull
D[{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
Attempts:
3 left
💡 Hint
Common Mistakes
Returning a string instead of an array.
Returning null or undefined which causes errors.
2fill in blank
medium

Complete the resolver to fetch a user by ID from a data source.

GraphQL
const resolvers = {
  Query: {
    user: (_, { id }) => [1]
  }
};
Drag options to blanks, or click blank then click option'
Ausers.find(user => user.id === id)
Busers[id]
Cusers.filter(user => user.id !== id)
Did
Attempts:
3 left
💡 Hint
Common Mistakes
Using filter which returns an array instead of a single object.
Accessing users by index which may not match the id.
3fill in blank
hard

Fix the error in the resolver that returns the user's full name by combining first and last names.

GraphQL
const resolvers = {
  User: {
    fullName: (user) => user.firstName [1] user.lastName
  }
};
Drag options to blanks, or click blank then click option'
A*
B+ ' ' +
C-
D/
Attempts:
3 left
💡 Hint
Common Mistakes
Using arithmetic operators that cause NaN or errors.
Forgetting the space between names.
4fill in blank
hard

Fill both blanks to create a resolver that returns posts filtered by author ID.

GraphQL
const resolvers = {
  Query: {
    postsByAuthor: (_, { authorId }) => posts.filter(post => post.[1] === [2])
  }
};
Drag options to blanks, or click blank then click option'
AauthorId
Bauthor
Did
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong field names that don't exist on post.
Comparing to the wrong variable.
5fill in blank
hard

Fill all three blanks to write a resolver that returns a map of user IDs to their email addresses for users older than 18.

GraphQL
const resolvers = {
  Query: {
    adultUserEmails: () => {
      return users.reduce((acc, [1]) => {
        if ([2].age [3] 18) {
          acc[[1].id] = [1].email;
        }
        return acc;
      }, {});
    }
  }
};
Drag options to blanks, or click blank then click option'
Auser
C>
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using different variable names inconsistently.
Using the wrong comparison operator.

Practice

(1/5)
1. What is the main purpose of resolvers in a GraphQL server?
easy
A. To connect schema fields to the actual data sources
B. To define the GraphQL schema types and fields
C. To handle client-side state management
D. To style the GraphQL playground interface

Solution

  1. Step 1: Understand the role of resolvers

    Resolvers are functions that fetch or compute the data for each field in the GraphQL schema.
  2. Step 2: Identify what resolvers connect

    Resolvers connect the schema fields to the actual data sources like databases or APIs.
  3. Final Answer:

    To connect schema fields to the actual data sources -> Option A
  4. Quick Check:

    Resolvers = Connect schema to data [OK]
Hint: Resolvers link schema fields directly to data sources [OK]
Common Mistakes:
  • Confusing resolvers with schema definitions
  • Thinking resolvers handle UI or styling
  • Assuming resolvers manage client state
2. Which of the following is the correct way to organize resolvers in a GraphQL server?
easy
A. Group resolvers by Query, Mutation, and type names
B. Put all resolvers in a single flat list without grouping
C. Write resolvers only inside the schema definition file
D. Use one resolver function for the entire schema

Solution

  1. Step 1: Recognize common resolver organization

    Resolvers are typically grouped by operation types: Query, Mutation, and by object types for clarity.
  2. Step 2: Evaluate the options

    Grouping by Query, Mutation, and types helps maintain and scale the server easily.
  3. Final Answer:

    Group resolvers by Query, Mutation, and type names -> Option A
  4. Quick Check:

    Organize resolvers by operation type [OK]
Hint: Group resolvers by Query, Mutation, and types for clarity [OK]
Common Mistakes:
  • Putting all resolvers in one list without grouping
  • Mixing resolver code inside schema files
  • Using a single resolver for all fields
3. Given this resolver structure:
const resolvers = {
  Query: {
    user: () => ({ id: 1, name: "Alice" })
  },
  User: {
    fullName: (parent) => parent.name + " Smith"
  }
};
What will be the result of querying { user { fullName } }?
medium
A. Error: Resolver for fullName missing
B. { "user": { "fullName": "Smith" } }
C. { "user": { "fullName": null } }
D. { "user": { "fullName": "Alice Smith" } }

Solution

  1. Step 1: Understand the Query resolver

    The Query resolver returns a user object with id 1 and name "Alice".
  2. Step 2: Understand the User type resolver

    The User resolver for fullName appends " Smith" to the parent's name, resulting in "Alice Smith".
  3. Final Answer:

    { "user": { "fullName": "Alice Smith" } } -> Option D
  4. Quick Check:

    fullName = parent.name + " Smith" [OK]
Hint: User resolver uses parent data to build fullName [OK]
Common Mistakes:
  • Forgetting to use parent argument in field resolver
  • Expecting fullName to be directly in Query resolver
  • Assuming missing resolver causes error
4. Consider this resolver code snippet:
const resolvers = {
  Query: {
    posts: () => fetchPosts()
  },
  Post: {
    author: () => fetchAuthor()
  }
};
What is the main problem with this resolver organization?
medium
A. The schema is missing a Subscription resolver
B. The Post.author resolver ignores the parent post and fetches unrelated author data
C. Resolvers must be async functions, but these are not
D. The Query.posts resolver should be inside Mutation

Solution

  1. Step 1: Analyze Post.author resolver

    The author resolver does not use the parent post argument, so it cannot fetch the correct author for each post.
  2. Step 2: Understand resolver context

    Field resolvers should use the parent argument to access related data; ignoring it causes wrong or unrelated data.
  3. Final Answer:

    The Post.author resolver ignores the parent post and fetches unrelated author data -> Option B
  4. Quick Check:

    Use parent argument in nested resolvers [OK]
Hint: Nested resolvers must use parent to access related data [OK]
Common Mistakes:
  • Ignoring parent argument in nested resolvers
  • Misplacing Query resolvers inside Mutation
  • Assuming all resolvers must be async
5. You want to organize resolvers for a GraphQL server with Queries, Mutations, and a custom type Book. Which structure below best supports maintainability and scalability?
hard
A. const resolvers = { Query: {...}, Mutation: {...} }; // no Book resolvers
B. const resolvers = { allResolvers: {...} };
C. const resolvers = { Query: {...}, Mutation: {...}, Book: {...} };
D. const resolvers = { Book: {...} }; // no Query or Mutation

Solution

  1. Step 1: Identify best practice for resolver organization

    Grouping resolvers by operation type (Query, Mutation) and by custom types (Book) keeps code clear and modular.
  2. Step 2: Compare options

    const resolvers = { Query: {...}, Mutation: {...}, Book: {...} }; clearly separates concerns and allows easy updates and scaling.
  3. Final Answer:

    const resolvers = { Query: {...}, Mutation: {...}, Book: {...} }; -> Option C
  4. Quick Check:

    Separate resolvers by operation and type [OK]
Hint: Group resolvers by Query, Mutation, and types for best structure [OK]
Common Mistakes:
  • Putting all resolvers in one object without grouping
  • Omitting resolvers for custom types
  • Ignoring Mutation resolvers
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard