Understanding Why Mutations Modify Data in GraphQL
📖 Scenario: You are building a simple GraphQL API for a small library. The library keeps track of books and their availability. You want to learn how to change data using GraphQL mutations.
🎯 Goal: Build a GraphQL mutation that modifies the availability status of a book in the library database.
📋 What You'll Learn
Create a GraphQL type Book with fields id, title, and available.
Create a mutation called updateBookAvailability that takes id and available as inputs.
The mutation should update the available status of the book with the given id.
Return the updated Book object from the mutation.
💡 Why This Matters
🌍 Real World
GraphQL mutations are used in real applications to change data on the server, such as updating user profiles, posting comments, or changing inventory status.
💼 Career
Understanding how mutations modify data is essential for backend developers working with GraphQL APIs to build interactive and dynamic applications.
Progress0 / 4 steps
1
Define the Book type
Create a GraphQL type called Book with fields id of type ID!, title of type String!, and available of type Boolean!.
GraphQL
Hint
Use the type keyword to define a new GraphQL type. Make sure to use exclamation marks ! to mark fields as required.
2
Add the updateBookAvailability mutation signature
Add a mutation called updateBookAvailability that takes two arguments: id of type ID! and available of type Boolean!. The mutation should return a Book type.
GraphQL
Hint
Define a Mutation type and add the mutation with the correct argument types and return type.
3
Implement the resolver logic to modify data
Write a resolver function called updateBookAvailability that takes id and available as arguments, finds the book by id in the books array, updates its available field, and returns the updated book.
GraphQL
Hint
Use Array.find() to locate the book by id. Then change its available property and return the updated book.
4
Complete the schema with Query and Mutation types
Add a Query type with a field books that returns a list of Book. Also, export the full schema including Query and Mutation types.
GraphQL
Hint
Define a Query type with a books field returning a list of Book. Export the schema and resolvers for use in your GraphQL server.
Practice
(1/5)
1. What is the main purpose of a mutation in GraphQL?
easy
A. To modify data by adding, updating, or deleting it
B. To only fetch data without changes
C. To define the schema structure
D. To create a new query type
Solution
Step 1: Understand the role of mutations
Mutations are designed to change data, unlike queries which only fetch data.
Step 2: Identify the correct purpose
Since mutations add, update, or delete data, their main purpose is to modify data.
Final Answer:
To modify data by adding, updating, or deleting it -> Option A
Quick Check:
Mutation = Modify data [OK]
Hint: Mutations always change data, queries only read data [OK]
Common Mistakes:
Confusing mutations with queries
Thinking mutations only fetch data
Believing mutations define schema only
2. Which of the following is the correct way to start a mutation operation in GraphQL?
easy
A. modify { updateUser(id: 1) { name } }
B. query { updateUser(id: 1) { name } }
C. update { updateUser(id: 1) { name } }
D. mutation { updateUser(id: 1) { name } }
Solution
Step 1: Identify the keyword for mutations
GraphQL uses the keyword mutation to start mutation operations.
Step 2: Check the options
Only mutation { updateUser(id: 1) { name } } uses the correct mutation keyword to start the operation.
Final Answer:
mutation { updateUser(id: 1) { name } } -> Option D
Quick Check:
Mutation keyword = mutation [OK]
Hint: Mutations always start with the 'mutation' keyword [OK]
Common Mistakes:
Using 'query' instead of 'mutation'
Using non-existent keywords like 'update' or 'modify'
Omitting the mutation keyword
3. Given the mutation below, what will be the result if the user with id 2 exists?
mutation {
updateUser(id: 2, input: {name: "Alice"}) {
id
name
}
}
Hint: Mutations return updated data if successful [OK]
Common Mistakes:
Assuming mutation returns null on success
Thinking mutation causes syntax error here
Believing mutation returns old data without changes
4. Identify the error in this mutation:
mutation {
addUser(name: "Bob")
{
id
name
}
}
medium
A. Mutation keyword is incorrect
B. Missing input argument object for addUser
C. Curly braces are misplaced
D. No error, mutation is correct
Solution
Step 1: Check mutation input format
Mutations usually require input as an object, e.g., addUser(input: {name: "Bob"}).
Step 2: Identify missing input argument
The mutation lacks the input argument object, causing an error.
Final Answer:
Missing input argument object for addUser -> Option B
Quick Check:
Input argument missing = error [OK]
Hint: Mutations need input objects for data changes [OK]
Common Mistakes:
Forgetting to wrap inputs in an object
Misplacing curly braces
Confusing mutation keyword
5. You want to delete a user and then immediately fetch the updated user list in one mutation operation. Which approach correctly uses mutations to achieve this?
hard
A. Use a single mutation with two fields: deleteUser and users to delete and fetch updated list
B. Use a query to delete the user and a mutation to fetch the list
C. Use two separate mutations, one for deleting and one for fetching users
D. Use a mutation to delete the user and a query to fetch the updated list separately
Solution
Step 1: Understand mutation capabilities
GraphQL mutations can include multiple fields to perform several operations in one request.
Step 2: Identify correct approach
Using a single mutation with deleteUser and users fields allows deleting and fetching updated data atomically.
Final Answer:
Use a single mutation with two fields: deleteUser and users to delete and fetch updated list -> Option A
Quick Check:
Single mutation can do multiple related operations [OK]
Hint: Combine delete and fetch in one mutation for atomic update [OK]
Common Mistakes:
Trying to delete with a query
Splitting operations into separate requests unnecessarily
Using mutation only for delete without fetching updated data
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.