0
0
GraphQLquery~10 mins

Apollo Federation concepts in GraphQL - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Apollo Federation concepts
Define Subgraphs
Add @key to types
Implement resolvers
Compose Supergraph
Deploy Gateway
Query Gateway
Gateway delegates to Subgraphs
Collect and merge responses
Return combined result to client
Apollo Federation lets you build a single GraphQL API from multiple services called subgraphs. The gateway composes them and handles queries by delegating to subgraphs.
Execution Sample
GraphQL
type Product @key(fields: "id") {
  id: ID!
  name: String
}

extend type Query {
  product(id: ID!): Product
}
Defines a Product type with a key field 'id' in a subgraph, and extends Query to fetch a product by id.
Execution Table
StepActionDetailsResult
1Define Subgraph schemaProduct type with @key on 'id'Subgraph schema ready
2Implement resolverResolver for Query.product(id)Subgraph can resolve product by id
3Compose SupergraphGateway composes subgraphs using their schemas and @keySupergraph schema created
4Deploy GatewayGateway runs with composed schemaGateway ready to accept queries
5Client sends queryQuery for product with id=1Gateway receives query
6Gateway delegatesGateway sends product(id:1) query to subgraphSubgraph receives query
7Subgraph resolvesSubgraph returns product dataProduct data returned to gateway
8Gateway mergesGateway merges responses if multiple subgraphsCombined result ready
9Gateway respondsGateway sends combined result to clientClient receives product data
10ExitQuery completedExecution ends
💡 Query completed after gateway merges subgraph responses and returns data to client
Variable Tracker
VariableStartAfter Step 3After Step 6After Step 7Final
Subgraph SchemaEmptyProduct type with @keySameSameSame
Gateway SchemaEmptyComposed supergraph schemaSameSameSame
Client QueryNoneNoneproduct(id:1)SameSame
Subgraph ResponseNoneNoneNone{id:1, name:'Table'}{id:1, name:'Table'}
Gateway ResponseNoneNoneNoneNone{id:1, name:'Table'}
Key Moments - 3 Insights
Why do we add @key to types in subgraphs?
The @key directive tells Apollo Federation which field uniquely identifies an object so the gateway can correctly merge data from different subgraphs. See execution_table step 1 and 3.
How does the gateway know which subgraph to ask for data?
The gateway uses the composed supergraph schema and the @key fields to route parts of the query to the correct subgraph. See execution_table step 6.
What happens if multiple subgraphs provide parts of the same type?
The gateway merges the responses from subgraphs based on the @key fields to form a complete object before sending to the client. See execution_table step 8.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at which step does the gateway compose the supergraph schema?
AStep 5
BStep 3
CStep 7
DStep 9
💡 Hint
Check the 'Action' column for 'Compose Supergraph' in execution_table
According to variable_tracker, what is the value of 'Subgraph Response' after Step 7?
AEmpty
BComposed schema
CProduct data {id:1, name:'Table'}
DClient query
💡 Hint
Look at the 'Subgraph Response' row and the 'After Step 7' column in variable_tracker
If the @key directive was missing on the Product type, what would likely happen?
AGateway would fail to merge data correctly
BGateway would ignore the subgraph
CClient would get an error immediately
DSubgraph would not start
💡 Hint
Refer to key_moments about the importance of @key directive
Concept Snapshot
Apollo Federation lets you combine multiple GraphQL services (subgraphs) into one API.
Use @key on types to identify unique objects.
Gateway composes subgraphs into a supergraph schema.
Gateway routes queries to subgraphs and merges results.
Clients query the gateway as if it is a single GraphQL API.
Full Transcript
Apollo Federation is a way to build a single GraphQL API from many smaller services called subgraphs. Each subgraph defines parts of the schema and marks unique types with @key. The gateway composes these subgraphs into a supergraph schema. When a client sends a query to the gateway, it breaks the query into parts and sends them to the right subgraphs. The subgraphs respond with data, and the gateway merges these responses into one result. This result is sent back to the client. This process allows teams to work independently on different parts of the API while providing a unified experience to clients.