📖 Scenario: You are building a simple GraphQL API for a bookstore. You want to allow users to query for books by specifying arguments like id or author.
🎯 Goal: Create a GraphQL query that uses arguments to fetch specific books by id and by author.
📋 What You'll Learn
Define a Book type with fields id, title, and author.
Create a Query type with a bookById field that takes an id argument of type ID! and returns a Book.
Create a Query type with a booksByAuthor field that takes an author argument of type String! and returns a list of Book.
Write example queries using arguments to fetch a book by id and books by author.
💡 Why This Matters
🌍 Real World
GraphQL APIs often require arguments to fetch specific data, like searching for a book by its ID or author.
💼 Career
Understanding query arguments is essential for backend developers and API designers working with GraphQL to build flexible and efficient data queries.
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 author of type String!.
GraphQL
Hint
Use the type keyword to define a new type. Each field needs a name and a type with an exclamation mark for required fields.
2
Add Query fields with arguments
Add a Query type with two fields: bookById that takes an id argument of type ID! and returns a Book, and booksByAuthor that takes an author argument of type String! and returns a list of Book.
GraphQL
Hint
Define the Query type with fields that accept arguments inside parentheses. Use square brackets [] to indicate a list return type.
3
Write a query to fetch a book by id
Write a GraphQL query named GetBookById that calls bookById with an argument id set to "1" and requests the id, title, and author fields.
GraphQL
Hint
Use the query keyword followed by the query name. Pass the argument inside parentheses and request the fields inside curly braces.
4
Write a query to fetch books by author
Write a GraphQL query named GetBooksByAuthor that calls booksByAuthor with an argument author set to "Jane Austen" and requests the id, title, and author fields for each book.
GraphQL
Hint
Similar to the previous query, but call booksByAuthor with the author argument and request the fields for each book in the list.
Practice
(1/5)
1. What is the purpose of query arguments in GraphQL?
easy
A. To write comments inside queries
B. To define new types in the schema
C. To specify exactly what data you want from the server
D. To create mutations for updating data
Solution
Step 1: Understand what query arguments do
Query arguments allow you to tell the server exactly which data you want, like filtering or limiting results.
Step 2: Compare options to the purpose
Only To specify exactly what data you want from the server describes specifying data in queries. Other options describe unrelated tasks.
Final Answer:
To specify exactly what data you want from the server -> Option C
Quick Check:
Query arguments = specify data [OK]
Hint: Arguments filter or limit data inside parentheses [OK]
Common Mistakes:
Confusing arguments with schema definitions
Thinking arguments create mutations
Using arguments for comments
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) { name }
B. user[id=5] { name }
C. user{id=5} { name }
D. user(id=5) { name }
Solution
Step 1: Recall GraphQL argument syntax
Arguments go inside parentheses after the field name, with colon separating name and value.
Step 2: Check each option's syntax
user(id: 5) { name } uses parentheses and colon correctly. Options B and C use brackets or braces incorrectly. user(id=5) { name } uses equals sign instead of colon.
Final Answer:
user(id: 5) { name } -> Option A
Quick Check:
Arguments use (name: value) syntax [OK]
Hint: Use parentheses and colon for arguments (name: value) [OK]
Common Mistakes:
Using square brackets instead of parentheses
Using equals sign instead of colon
Placing arguments inside braces
3. Given the query { books(limit: 2) { title } } and a database with books titled 'A', 'B', 'C', what will the query return?
The limit: 2 argument restricts the number of returned books to 2.
Step 2: Predict the returned data
From books 'A', 'B', 'C', only the first two 'A' and 'B' will be returned.
Final Answer:
[{ title: 'A' }, { title: 'B' }] -> Option D
Quick Check:
limit: 2 returns 2 items [OK]
Hint: Limit argument restricts number of results [OK]
Common Mistakes:
Assuming all items return ignoring limit
Thinking limit causes error
Expecting empty list when data exists
4. Identify the error in this GraphQL query: { users(age: 'twenty') { name } } assuming age expects an integer argument.
medium
A. The field name 'users' is invalid
B. The argument value should be an integer, not a string
C. Missing curly braces around the argument
D. The query is correct and will run without errors
Solution
Step 1: Check argument type requirements
The age argument expects an integer, but the query passes a string 'twenty'.
Step 2: Identify the type mismatch error
Passing a string instead of an integer causes a type error in GraphQL.
Final Answer:
The argument value should be an integer, not a string -> Option B
Quick Check:
Argument types must match schema [OK]
Hint: Match argument types exactly as defined [OK]
Common Mistakes:
Passing strings instead of numbers
Assuming field names cause errors
Thinking braces are needed around arguments
5. You want to query a list of products sorted by price descending and limited to 3 items. Which query correctly uses arguments to achieve this?
hard
A. { products(sortBy: "price_desc", limit: 3) { name price } }
B. { products(limit: 3, order: "desc") { name price } }
C. { products(sort: price, limit: 3) { name price } }
D. { products(limit: 3, sortBy: "desc_price") { name price } }
Solution
Step 1: Identify correct argument names and values
The argument sortBy with value "price_desc" clearly indicates sorting by price descending. The limit argument limits results to 3.
Step 2: Evaluate each option's correctness
{ products(sortBy: "price_desc", limit: 3) { name price } } uses both arguments correctly. { products(limit: 3, order: "desc") { name price } } uses 'order' which may be invalid. { products(sort: price, limit: 3) { name price } } uses 'sort' without quotes and no direction. { products(limit: 3, sortBy: "desc_price") { name price } } uses 'desc_price' which is not standard.
Final Answer:
{ products(sortBy: "price_desc", limit: 3) { name price } } -> Option A
Quick Check:
Use correct argument names and values [OK]
Hint: Use exact argument names and values from schema [OK]
Common Mistakes:
Using wrong argument names like 'order' or 'sort'
Passing unquoted values for strings
Mixing argument order incorrectly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.