📖 Scenario: You are building a simple GraphQL API for a bookstore. The API should allow clients to query books and filter them by genre.
🎯 Goal: Create a GraphQL resolver that uses the args argument to filter books by genre.
📋 What You'll Learn
Create a list of books with title and genre fields
Add a GraphQL query type with a books field that accepts a genre argument
Use the args argument in the resolver to filter books by the given genre
Return all books if no genre argument is provided
💡 Why This Matters
🌍 Real World
Filtering data based on user input is common in APIs to provide customized results.
💼 Career
Understanding how to use arguments in GraphQL resolvers is essential for backend developers working with GraphQL APIs.
Progress0 / 4 steps
1
DATA SETUP: Create a list of books
Create a variable called books that is a list of dictionaries. Each dictionary should have the keys title and genre with these exact entries: {'title': 'The Hobbit', 'genre': 'Fantasy'}, {'title': '1984', 'genre': 'Dystopian'}, {'title': 'To Kill a Mockingbird', 'genre': 'Classic'}.
GraphQL
Hint
Use a list of dictionaries with the exact keys and values given.
2
CONFIGURATION: Define the GraphQL schema with a genre argument
Create a GraphQL type Query with a field books that accepts an optional genre argument of type String and returns a list of Book type. Also define the Book type with title and genre fields of type String.
GraphQL
Hint
Define the schema as a string with the exact types and fields.
3
CORE LOGIC: Write the resolver using the args argument
Create a resolver function called resolve_books that takes parent, args, and context as parameters. Use args.get('genre') to get the genre filter. Return all books if genre is null, otherwise return only books where the genre matches args['genre'].
GraphQL
Hint
Use args.get('genre') to get the argument and filter the list accordingly.
4
COMPLETION: Connect the resolver to the schema
Create a dictionary called resolvers with a key 'Query' mapping to another dictionary with key 'books' and value resolve_books.
GraphQL
Hint
Use a nested dictionary to map the Query field to the resolver function.
Practice
(1/5)
1. What is the main purpose of args in a GraphQL query or mutation?
easy
A. To format the output data
B. To define the schema types
C. To connect to the database
D. To pass extra information to customize the query or mutation
Solution
Step 1: Understand what args do in GraphQL
Args are used to send extra details or parameters to queries or mutations to specify what data you want.
Step 2: Compare with other options
Defining schema types, formatting output, or connecting to the database are not the role of args.
Final Answer:
To pass extra information to customize the query or mutation -> Option D
Quick Check:
Args = extra info for queries/mutations [OK]
Hint: Args always go inside parentheses after field name [OK]
Common Mistakes:
Thinking args define schema types
Confusing args with output formatting
Assuming args connect to the database
2. Which of the following is the correct syntax to pass an argument named id with value 5 to a GraphQL query field user?
easy
A. user(id: 5)
B. user[id=5]
C. user{id=5}
D. user(id=5)
Solution
Step 1: Recall GraphQL argument syntax
Arguments are passed inside parentheses with colon separating name and value, like fieldName(argName: value).
Step 2: Check each option
user(id: 5) uses parentheses and colon correctly. The options using brackets or braces are incorrect. user(id=5) uses equals sign which is invalid in GraphQL.
Final Answer:
user(id: 5) -> Option A
Quick Check:
Args syntax = parentheses + colon [OK]
Hint: Use parentheses and colon for args: field(arg: value) [OK]
Common Mistakes:
Using brackets [] instead of parentheses ()
Using equals sign = instead of colon :
Using braces {} for arguments
3. Given the GraphQL query:
{ user(id: 3) { name age } }
What will be the result if the user with id=3 has name "Alice" and age 30?
The query requests the user with id 3 and asks for the fields name and age.
Step 2: Match the expected output
The response should include both name and age for user 3. { "data": { "user": { "name": "Alice", "age": 30 } } } matches this exactly. { "data": { "user": { "id": 3, "name": "Alice" } } } includes id which was not requested. { "data": { "user": { "name": "Alice" } } } misses age. { "error": "User not found" } is an error which is incorrect since user exists.
A. Using equals sign (=) instead of colon (:) for argument
B. Missing curly braces around the query
C. Field name 'product' is invalid
D. Arguments must be outside parentheses
Solution
Step 1: Check argument syntax
GraphQL requires arguments to use colon (:), not equals sign (=). The query uses id=10 which is invalid.
Step 2: Verify other parts
The query has curly braces, 'product' is a valid field name, and arguments must be inside parentheses, so other options are incorrect.
Final Answer:
Using equals sign (=) instead of colon (:) for argument -> Option A
Quick Check:
Args use colon, not equals [OK]
Hint: Args use colon (:), never equals (=) [OK]
Common Mistakes:
Using = instead of : in args
Thinking args go outside parentheses
Assuming missing braces error
5. You want to fetch a list of books published after year 2000 using a GraphQL query with an argument publishedAfter. Which query correctly uses the args to achieve this?
hard
A. { books["publishedAfter": 2000] { title author } }
B. { books { title author publishedAfter: 2000 } }
C. { books(publishedAfter: 2000) { title author } }
D. { books(publishedAfter = 2000) { title author } }
Solution
Step 1: Understand how to pass args in GraphQL
Arguments must be inside parentheses after the field name, using colon to assign values.
Step 2: Evaluate each option
{ books(publishedAfter: 2000) { title author } } correctly uses parentheses and colon. { books { title author publishedAfter: 2000 } } places argument inside selection set which is invalid. { books(publishedAfter = 2000) { title author } } uses equals sign instead of colon. { books["publishedAfter": 2000] { title author } } uses brackets and quotes incorrectly.
Final Answer:
{ books(publishedAfter: 2000) { title author } } -> Option C
Quick Check:
Args inside parentheses with colon [OK]
Hint: Args go inside parentheses with colon [OK]
Common Mistakes:
Placing args inside selection set
Using equals sign instead of colon
Using brackets instead of parentheses
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.