📖 Scenario: You are building a simple online bookstore API using GraphQL. You need to define the data types that describe books and authors so the API can understand the structure of the data it will handle.
🎯 Goal: Create GraphQL type definitions for Book and Author that include fields with specific types. Then add a query type to fetch books and authors.
📋 What You'll Learn
Define a Book type with fields: id (ID!), title (String!), author (Author!)
Define an Author type with fields: id (ID!), name (String!)
Create a Query type with fields: books (list of Book), authors (list of Author)
💡 Why This Matters
🌍 Real World
GraphQL type definitions are essential for building APIs that clients can query to get exactly the data they need.
💼 Career
Defining clear and correct GraphQL schemas is a key skill for backend developers working with modern APIs.
Progress0 / 4 steps
1
Define the Book type
Create a GraphQL type called Book with these exact fields: id of type ID!, title of type String!, and author of type Author!.
GraphQL
Hint
Use type Book { ... } syntax. Remember to use ! to mark fields as required.
2
Define the Author type
Add a GraphQL type called Author with these exact fields: id of type ID! and name of type String!.
GraphQL
Hint
Use the same syntax as the Book type but with the Author fields.
3
Create the Query type
Add a GraphQL Query type with these exact fields: books which returns a list of Book (use square brackets), and authors which returns a list of Author.
GraphQL
Hint
Use square brackets [] to indicate a list of items in GraphQL.
4
Complete the schema with schema definition
Add the GraphQL schema definition that sets the query root type to the Query type you created.
GraphQL
Hint
The schema block tells GraphQL which type is the root query type.
Practice
(1/5)
1. What is the main purpose of type definitions in GraphQL?
easy
A. To describe the shape and types of data clients can request
B. To execute database queries directly
C. To style the user interface of a GraphQL client
D. To store data permanently in the server
Solution
Step 1: Understand the role of type definitions
Type definitions specify what data types exist and how data is structured in GraphQL.
Step 2: Identify what clients use type definitions for
Clients use type definitions to know what data they can ask for and how it will look.
Final Answer:
To describe the shape and types of data clients can request -> Option A
Quick Check:
Type definitions = Describe data shape [OK]
Hint: Type definitions describe data structure, not execution or styling [OK]
Common Mistakes:
Confusing type definitions with query execution
Thinking type definitions style UI
Assuming type definitions store data
2. Which of the following is the correct way to define a simple GraphQL object type named Book with a title field of type String?
easy
A. define Book { title: String }
B. object Book { title: String }
C. Book type { title: String }
D. type Book { title: String }
Solution
Step 1: Recall GraphQL syntax for object types
GraphQL uses the keyword type followed by the type name and fields in braces.
Step 2: Match the correct syntax
type Book { title: String } matches the correct syntax: type Book { title: String }.
Final Answer:
type Book { title: String } -> Option D
Quick Check:
Object type syntax = type Name { fields } [OK]
Hint: Remember: 'type' keyword defines object types in GraphQL [OK]
Common Mistakes:
Using 'object' instead of 'type'
Placing 'type' after the name
Using 'define' keyword which is invalid
3. Given the following GraphQL type definition:
type User {
id: ID!
name: String
age: Int
}
Which of these queries will return the name and age fields of a user?
medium
A. { user { id name age } }
B. { user { name age } }
C. { user { id } }
D. { user { age id } }
Solution
Step 1: Identify requested fields in each query
We want only name and age fields returned.
Step 2: Check which query requests exactly those fields
{ user { name age } } requests name and age only, matching the requirement.
Final Answer:
{ user { name age } } -> Option B
Quick Check:
Query fields = name and age only [OK]
Hint: Select only needed fields inside braces after type name [OK]
Common Mistakes:
Including extra fields like 'id' when not asked
Requesting fields in wrong order (order doesn't matter but distracts)
Missing required fields if needed
4. Identify the error in this GraphQL type definition:
type Product {
id: ID
price: Float!
name: String!
description: String
price: Int
}
medium
A. Missing exclamation mark on 'id' field
B. Incorrect type 'Float!' for price
C. Duplicate field name 'price' with different types
D. Description field cannot be optional
Solution
Step 1: Review all fields for correctness
Notice that 'price' is declared twice with different types: Float! and Int.
Step 2: Understand GraphQL rules on field names
Field names must be unique within a type; duplicates cause errors.
Final Answer:
Duplicate field name 'price' with different types -> Option C
Quick Check:
Duplicate fields cause errors [OK]
Hint: Check for repeated field names in type definitions [OK]
Common Mistakes:
Ignoring duplicate field names
Thinking missing '!' is always an error
Assuming optional fields are invalid
5. You want to define a GraphQL type Order that includes an id (non-null ID), a list of items (each an Item type), and a total price (non-null Float). Which is the correct type definition?
hard
A. type Order { id: ID! items: [Item!]! total: Float! }
B. type Order { id: ID items: Item total: Float }
C. type Order { id: ID! items: [Item]! total: Float! }
D. type Order { id: ID! items: [Item!] total: Float }
Solution
Step 1: Analyze each field requirement
'id' must be non-null ID, 'items' is a non-null list of non-null Item, 'total' is non-null Float.
Step 2: Match the correct syntax
type Order { id: ID! items: [Item!]! total: Float! } correctly uses ID!, [Item!]! (list non-null and items non-null), and Float!.
Final Answer:
type Order { id: ID! items: [Item!]! total: Float! } -> Option A
Quick Check:
Non-null fields and list syntax correct [OK]
Hint: Use [Type!]! for non-null list of non-null items [OK]
Common Mistakes:
Missing non-null markers (!)
Using list without non-null item type
Confusing list syntax with single type
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.