What if your big app's API could be built by many teams without breaking anything?
Why Apollo Federation concepts in GraphQL? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you have a big team building a huge app. Everyone works on their own part, but you have to combine all parts manually into one big API. You copy and paste code, fix conflicts, and try to keep everything in sync.
This manual way is slow and confusing. Changes in one part can break others. It's hard to know who owns what. You spend more time fixing mistakes than building features.
Apollo Federation lets each team build their own small API piece independently. Then it magically combines all pieces into one big API that works smoothly. No more copying or conflicts!
Combine APIs by copying schemas and merging resolvers manually.Use @key and @extends directives to define ownership and let Apollo Gateway stitch schemas automatically.
It enables teams to work independently yet deliver a unified, scalable API that feels like one.
A large online store where separate teams manage products, users, and orders APIs, but customers see one seamless API for everything.
Manual API merging is slow and error-prone.
Apollo Federation splits API ownership cleanly.
Teams build independently; Apollo Gateway unifies automatically.
Practice
Solution
Step 1: Understand Apollo Federation's role
Apollo Federation is designed to combine multiple GraphQL services into one unified API.Step 2: Compare options
Options B, C, and D describe unrelated tasks. Only To combine multiple GraphQL services into a single API correctly describes Apollo Federation's purpose.Final Answer:
To combine multiple GraphQL services into a single API -> Option CQuick Check:
Apollo Federation = combine services [OK]
- Confusing Federation with database schema design
- Thinking Federation replaces REST APIs directly
- Assuming Federation optimizes SQL queries
Solution
Step 1: Recall the directive for unique identifiers
In Apollo Federation, the@keydirective marks the unique identifier fields for an entity.Step 2: Check syntax correctness
type User @key(fields: "id") { id: ID! name: String } uses@key(fields: "id"), which is the correct syntax. Other options use incorrect directives.Final Answer:
type User @key(fields: "id") { id: ID! name: String } -> Option BQuick Check:
@key directive = unique ID marker [OK]
- Using @unique or @id instead of @key
- Missing quotes around field names
- Confusing @key with database primary key syntax
extend type Product @key(fields: "upc") { upc: String @external price: Int }What does the
extend type keyword do here?Solution
Step 1: Understand 'extend type' in Apollo Federation
Theextend typekeyword adds fields to a type defined in another service.Step 2: Analyze the example
The Product type is extended to add thepricefield, whileupcis marked as external, meaning it comes from the original service.Final Answer:
Adds the price field to an existing Product type from another service -> Option AQuick Check:
extend type = add fields to existing type [OK]
- Thinking extend type creates a new type
- Confusing @external with local fields
- Assuming extend type removes fields
type Review @key(fields: "id") { id: ID! body: String author: User }Assuming User is defined in another service, what is missing?
Solution
Step 1: Understand referencing external entities
In Apollo Federation, to reference an entity type like User from another service, the schema must explicitly extend that type with its @key directive:extend type User @key(fields: "id") { id: ID! }.Step 2: Analyze the snippet
The Review type references User via author: User but lacks the required extend declaration for User, which is necessary for the gateway to know this service can resolve User.Final Answer:
The User type should be imported explicitly -> Option AQuick Check:
Reference entities -> extend type @key [OK]
- Marking author field with @provides or @requires
- Marking author field as @external
- Using extend keyword for Review type
Accounts defining type User @key(fields: "id") { id: ID! name: String } and Reviews extending User with extend type User @key(fields: "id") { id: ID! reviews: [Review] }. How does Apollo Federation resolve the User entity across these services?Solution
Step 1: Understand @key usage in federation
The@keydirective identifies the unique field used to match entities across services.Step 2: Analyze entity resolution
Apollo Federation merges types with the same @key field by matching their unique identifiers, combining fields from both services.Final Answer:
It merges User types by matching the @key field 'id' across services -> Option DQuick Check:
@key fields unify entities across services [OK]
- Thinking types are duplicated instead of merged
- Assuming extend type is ignored
- Believing manual merging is required
