📖 Scenario: You are building a GraphQL API for a blog. You want to return a list of posts with pagination support.
🎯 Goal: Create a GraphQL connection pattern with edges, nodes, and pageInfo fields to support paginated queries of blog posts.
📋 What You'll Learn
Define a Post type with id and title fields
Create a PostEdge type with cursor and node fields
Create a PageInfo type with hasNextPage and endCursor fields
Create a PostConnection type with edges (list of PostEdge), nodes (list of Post), and pageInfo fields
💡 Why This Matters
🌍 Real World
GraphQL connection pattern is widely used in APIs to provide efficient and flexible pagination for lists of data, such as posts, comments, or users.
💼 Career
Understanding and implementing connection patterns is essential for backend developers working with GraphQL APIs to build scalable and user-friendly data fetching.
Progress0 / 4 steps
1
Define the Post type
Create a GraphQL type called Post with two fields: id of type ID! and title of type String!.
GraphQL
Hint
Use type Post { id: ID! title: String! } syntax.
2
Create the PostEdge type
Create a GraphQL type called PostEdge with two fields: cursor of type String! and node of type Post!.
GraphQL
Hint
Remember to link node to the Post type.
3
Define the PageInfo type
Create a GraphQL type called PageInfo with two fields: hasNextPage of type Boolean! and endCursor of type String (nullable).
GraphQL
Hint
endCursor can be null, so no exclamation mark.
4
Create the PostConnection type
Create a GraphQL type called PostConnection with three fields: edges as a list of PostEdge (non-nullable items), nodes as a list of Post (non-nullable items), and pageInfo of type PageInfo!.
GraphQL
Hint
Use lists with non-nullable items and non-nullable list itself for edges and nodes.
Practice
(1/5)
1. What is the main purpose of the pageInfo field in the GraphQL connection pattern?
easy
A. To define the schema of the connection
B. To list all the nodes in the connection
C. To provide information about pagination like if there are more pages
D. To store the actual data items
Solution
Step 1: Understand the role of pageInfo
The pageInfo field contains metadata about pagination such as whether there are more pages available.
Step 2: Differentiate from edges and nodes
Unlike edges or nodes which hold data items, pageInfo only provides pagination status.
Final Answer:
To provide information about pagination like if there are more pages -> Option C
Quick Check:
pageInfo = pagination info [OK]
Hint: Remember pageInfo tells if more pages exist [OK]
Common Mistakes:
Confusing pageInfo with nodes or edges
Thinking pageInfo holds actual data items
Ignoring pagination metadata role
2. Which of the following is the correct way to query the edges and node fields in a GraphQL connection?
easy
A.
{ users { edge { node { id name } } } }
B.
{ users { nodes { id name } } }
C.
{ users { pageInfo { hasNextPage } } }
D.
{ users { edges { node { id name } } } }
Solution
Step 1: Recall correct field names in connection pattern
The connection pattern uses edges (plural) and inside each edge a node (singular) holds the data.
Step 2: Check each option's syntax
{ users { edges { node { id name } } } }
correctly uses edges and node.
{ users { nodes { id name } } }
uses nodes which is valid but not with edges.
{ users { pageInfo { hasNextPage } } }
queries only pageInfo.
{ users { edge { node { id name } } } }
uses edge singular which is incorrect.
Final Answer:
{ users { edges { node { id name } } } } -> Option D
Quick Check:
edges plural, node singular inside edges [OK]
Hint: Edges is plural; node is singular inside edges [OK]
Common Mistakes:
Using 'edge' instead of 'edges'
Mixing nodes and edges syntax
Querying pageInfo instead of data fields
3. Given this GraphQL query:
{ posts(first: 2) { edges { cursor node { id title } } pageInfo { hasNextPage } } }
And the server returns two posts with ids 101 and 102, what will pageInfo.hasNextPage be if there are more posts after these two?
medium
A. true
B. false
C. null
D. undefined
Solution
Step 1: Understand the meaning of hasNextPage
hasNextPage is true if more items exist beyond the current page.
Step 2: Apply to given scenario
Since the server returns 2 posts but more posts exist after them, hasNextPage must be true.
Final Answer:
true -> Option A
Quick Check:
More posts after current page means hasNextPage = true [OK]
Hint: More items after current page means hasNextPage true [OK]
Common Mistakes:
Assuming hasNextPage is false when items equal page size
Confusing hasNextPage with hasPreviousPage
Expecting null or undefined instead of boolean
4. You wrote this GraphQL query:
{ comments { edge { node { id text } } } }
But it returns an error. What is the likely cause?
medium
A. The field 'node' should be 'nodes'
B. The field should be 'edges' not 'edge'
C. Missing 'pageInfo' field causes error
D. The query must include 'pageInfo' and 'nodes' together
Solution
Step 1: Check the connection field names
The connection pattern uses edges (plural) not edge (singular).
Step 2: Identify the error cause
Using edge causes a field not found error because the schema expects edges.
Final Answer:
The field should be 'edges' not 'edge' -> Option B
Hint: Use 'edges' plural, not 'edge' singular [OK]
Common Mistakes:
Using 'edge' instead of 'edges'
Thinking 'node' should be plural
Assuming pageInfo is mandatory for query success
5. You want to fetch a list of products with their IDs and names using the connection pattern. You only need the list of products without pagination info. Which query is best?
hard
A.
{ products { nodes { id name } } }
B.
{ products { edges { node { id name } } pageInfo { hasNextPage } } }
C.
{ products { pageInfo { hasPreviousPage } } }
D.
{ products { edges { cursor } } }
Solution
Step 1: Understand the difference between nodes and edges
nodes gives a simple list of items without pagination details, while edges includes cursors for pagination.
Step 2: Choose the query matching the need
Since pagination info is not needed, querying nodes directly is simpler and efficient.
Final Answer:
{ products { nodes { id name } } } -> Option A
Quick Check:
Use nodes for simple list without pagination [OK]
Hint: Use nodes for simple lists without pagination [OK]
Common Mistakes:
Using edges and pageInfo when not needed
Querying only pageInfo without data
Ignoring simpler nodes field for lists
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.