Bird
Raised Fist0
GraphQLquery~10 mins

Interface types in GraphQL - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Interface types
Define Interface
Implement Interface in Types
Query Using Interface
Return Objects Matching Interface
Client Uses Interface Fields
This flow shows how a GraphQL interface is defined, implemented by types, queried, and returns objects that share the interface fields.
Execution Sample
GraphQL
interface Animal {
  id: ID!
  name: String!
}

type Dog implements Animal {
  id: ID!
  name: String!
  barkVolume: Int
}

query {
  animals {
    id
    name
  }
}
Defines an Animal interface, a Dog type implementing it, and queries animals returning id and name fields.
Execution Table
StepActionEvaluationResult
1Define interface Animal with fields id and nameInterface createdAnimal interface ready
2Define type Dog implementing AnimalDog has id, name, barkVolumeDog type ready
3Query animals field returning list of AnimalServer resolves animals list[Dog{id:1, name:'Rex', barkVolume:5}, Dog{id:2, name:'Fido', barkVolume:3}]
4Return only interface fields id and name for each animalFields id and name extracted[{id:1, name:'Rex'}, {id:2, name:'Fido'}]
5Client receives list of animals with id and nameQuery completeClient sees animals with id and name
💡 Query completes after returning all animals with interface fields
Variable Tracker
VariableStartAfter Step 3After Step 4Final
animalsundefined[Dog{id:1, name:'Rex', barkVolume:5}, Dog{id:2, name:'Fido', barkVolume:3}][{id:1, name:'Rex'}, {id:2, name:'Fido'}][{id:1, name:'Rex'}, {id:2, name:'Fido'}]
Key Moments - 2 Insights
Why does the query only return id and name fields, not barkVolume?
Because the query requests only the interface fields id and name, the server returns only those fields even though Dog has barkVolume. See execution_table step 4.
Can multiple types implement the same interface?
Yes, many types can implement the same interface. The query returns all objects matching the interface fields regardless of their specific type. This is implied in step 2 and 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3, what is the value of animals?
Aundefined
B[Dog{id:1, name:'Rex', barkVolume:5}, Dog{id:2, name:'Fido', barkVolume:3}]
C[{id:1, name:'Rex'}, {id:2, name:'Fido'}]
Dnull
💡 Hint
Check the 'Evaluation' column at step 3 in execution_table
At which step does the server extract only the interface fields from the objects?
AStep 2
BStep 3
CStep 4
DStep 5
💡 Hint
Look for the step mentioning 'Fields id and name extracted' in execution_table
If the query requested barkVolume field, what would change in the execution_table?
AStep 4 would include barkVolume in the returned fields
BStep 3 would return no animals
CStep 5 would fail
DNo change
💡 Hint
Consider how requested fields affect the returned data in execution_table steps 3 and 4
Concept Snapshot
GraphQL Interface Types:
- Define interface with common fields
- Types implement interface
- Query interface to get all implementing types
- Response includes only requested interface fields
- Enables polymorphic queries
Full Transcript
This visual execution shows how GraphQL interface types work. First, an interface named Animal is defined with fields id and name. Then, a type Dog implements this interface and adds a field barkVolume. When querying animals, the server returns a list of Dog objects. However, since the query requests only id and name, the server extracts and returns only those fields for each animal. This allows clients to query multiple types through a common interface and get consistent fields. The execution table traces each step from defining the interface to returning the query result. Variable tracking shows how the animals variable changes from undefined to a list of full Dog objects, then to a list of objects with only interface fields. Key moments clarify why only interface fields are returned and that multiple types can implement the same interface. The quiz tests understanding of these steps and the effect of requested fields on the output.

Practice

(1/5)
1. What is the main purpose of an interface in GraphQL?
easy
A. To define a set of fields that multiple types must implement
B. To create a new scalar type
C. To specify a query operation
D. To define a mutation resolver

Solution

  1. Step 1: Understand the role of interfaces

    Interfaces in GraphQL define common fields that multiple types share.
  2. Step 2: Compare options with interface purpose

    Only To define a set of fields that multiple types must implement correctly states that interfaces define shared fields for multiple types.
  3. Final Answer:

    To define a set of fields that multiple types must implement -> Option A
  4. Quick Check:

    Interface = shared fields [OK]
Hint: Interfaces define shared fields for multiple types [OK]
Common Mistakes:
  • Confusing interfaces with scalar types
  • Thinking interfaces define queries or mutations
  • Assuming interfaces can be instantiated directly
2. Which of the following is the correct syntax to declare an interface named Node with a field id of type ID!?
easy
A. interface Node { id: ID! }
B. interface Node { id: ID }
C. interface Node id: ID!
D. interface Node { id: String! }

Solution

  1. Step 1: Recall GraphQL interface syntax

    Interfaces are declared with the keyword interface, followed by the name and fields with types.
  2. Step 2: Check field type correctness

    The field id must be non-nullable ID!, so interface Node { id: ID! } matches exactly.
  3. Final Answer:

    interface Node { id: ID! } -> Option A
  4. Quick Check:

    Correct interface syntax = interface Node { id: ID! } [OK]
Hint: Use 'interface Name { field: Type! }' syntax exactly [OK]
Common Mistakes:
  • Omitting the exclamation mark for non-nullable
  • Using wrong scalar type like String instead of ID
  • Missing braces around fields
3. Given the interface and types below, what will the query { search { id name } return?
interface SearchResult {
  id: ID!
}
type User implements SearchResult {
  id: ID!
  name: String!
}
type Product implements SearchResult {
  id: ID!
  name: String!
  price: Float!
}
medium
A. A list of objects each with fields id and name
B. A list of objects with only id fields
C. An error because price is missing in the interface
D. A syntax error because name is not in the interface

Solution

  1. Step 1: Review the interface definition

    The SearchResult interface only defines id: ID!. The name field is present in implementing types but not in the interface.
  2. Step 2: Analyze the query against the interface

    Querying name directly on search (SearchResult) fails because it is not defined on the interface. GraphQL requires inline fragments for type-specific fields like ... on User { name }.
  3. Final Answer:

    A syntax error because name is not in the interface -> Option D
  4. Quick Check:

    Directly query only interface fields; use fragments for type-specific [OK]
Hint: Query only interface fields directly; use fragments for type-specific fields [OK]
Common Mistakes:
  • Assuming only interface fields can be queried
  • Expecting error if extra fields exist in types
  • Confusing interface fields with type-specific fields
4. Consider the following schema snippet:
interface Vehicle {
  id: ID!
  speed: Int!
}
type Car implements Vehicle {
  id: ID!
  speed: Int!
  brand: String!
}
type Bike implements Vehicle {
  id: ID!
  brand: String!
}
What is the error in this schema?
medium
A. Car type has an extra field brand not in Vehicle interface
B. Bike type is missing the required speed field from Vehicle interface
C. Vehicle interface cannot have fields of type Int
D. Interface Vehicle must be a type, not an interface

Solution

  1. Step 1: Check interface field requirements

    All types implementing an interface must have all interface fields with matching types.
  2. Step 2: Verify Bike type fields

    Bike implements Vehicle but lacks the speed field required by Vehicle, causing an error.
  3. Final Answer:

    Bike type is missing the required speed field from Vehicle interface -> Option B
  4. Quick Check:

    Implementing types must have all interface fields [OK]
Hint: Check all interface fields are implemented in each type [OK]
Common Mistakes:
  • Thinking extra fields in types cause errors
  • Ignoring missing interface fields in types
  • Confusing interface with type declaration rules
5. You want to design a GraphQL schema where multiple types like Book and Movie share fields id and title, but each has unique fields too. How should you use interfaces to achieve this?
hard
A. Use scalar types for id and title in each type separately
B. Create a union type of Book and Movie without shared fields
C. Define an interface Item with id and title, then have Book and Movie implement Item and add their unique fields
D. Define Book and Movie as separate types without interfaces

Solution

  1. Step 1: Identify shared fields and unique fields

    Both Book and Movie share id and title, but have unique fields.
  2. Step 2: Use interface for shared fields

    Defining an interface Item with shared fields and implementing it in Book and Movie allows reuse and flexibility.
  3. Step 3: Add unique fields in each type

    Book and Movie can add their own fields beyond the interface.
  4. Final Answer:

    Define an interface Item with id and title, then have Book and Movie implement Item and add their unique fields -> Option C
  5. Quick Check:

    Interfaces = shared fields + types add unique fields [OK]
Hint: Use interfaces for shared fields, types add unique fields [OK]
Common Mistakes:
  • Using union types instead of interfaces for shared fields
  • Duplicating shared fields in each type without interface
  • Misusing scalar types for shared fields