Federation helps GraphQL grow by letting many teams work together easily. It breaks a big API into smaller parts that fit well together.
Why federation scales GraphQL
Start learning this pattern below
Jump into concepts and practice - no test required
type Product @key(fields: "id") { id: ID! name: String price: Float } extend type Query { product(id: ID!): Product }
The @key directive marks the unique field to identify an entity across services.
extend type lets you add fields to types defined in other services.
type User @key(fields: "email") { email: String! name: String } extend type Review { author: User }
type Product @key(fields: "upc") { upc: String! price: Float } extend type Inventory { product: Product quantity: Int }
This shows two services: one for products and one for reviews. They share the Product type using federation. The gateway lets clients ask for product info and reviews together.
# Service A: Product service type Product @key(fields: "id") { id: ID! name: String } extend type Query { product(id: ID!): Product } # Service B: Review service type Review { id: ID! body: String product: Product @provides(fields: "name") } extend type Product @key(fields: "id") { id: ID! @external name: String @external reviews: [Review] } # Gateway combines these services so clients query one API # Query example: # { # product(id: "1") { # name # reviews { # body # } # } # }
Federation lets teams own parts of the schema independently, improving collaboration.
It reduces the risk of one big schema becoming too complex to manage.
Common mistake: forgetting to mark keys or external fields, which breaks linking between services.
Federation splits a big GraphQL API into smaller, manageable parts.
It helps many teams work together without conflicts.
Clients get a single API that combines data from all services smoothly.
Practice
Solution
Step 1: Understand federation purpose
Federation breaks a large GraphQL API into smaller, manageable services.Step 2: Identify the benefit
This splitting helps teams work independently and manage parts easily.Final Answer:
It splits a big API into smaller parts for easier management. -> Option CQuick Check:
Federation = splits API for management [OK]
- Thinking federation slows down the API
- Believing federation removes backend services
- Assuming all teams share one codebase
Solution
Step 1: Recall federation SDL syntax
Federated services useextend typeto add fields to shared types.Step 2: Match correct syntax
extend type Query { product(id: ID!): Product } usesextend type Query, which is correct for federation.Final Answer:
extend type Query { product(id: ID!): Product } -> Option BQuick Check:
Federation uses 'extend type' syntax [OK]
- Using 'type' instead of 'extend type' in federated services
- Using non-existent 'service' or 'federation' keywords
- Confusing base schema with extended schema
Product service defines type Product { id: ID!, name: String } and Review service extends it with extend type Product { reviews: [Review] }. What will a query for { product(id: "1") { name reviews { body } } } return?Solution
Step 1: Understand federation field extension
The Review service extends Product with reviews, so combined schema includes reviews.Step 2: Query result combines data
The query asks for product name and reviews body, which federation resolves from both services.Final Answer:
Product name and list of reviews with their body fields. -> Option AQuick Check:
Federation merges fields, query returns combined data [OK]
- Assuming extended fields are unavailable
- Expecting errors due to field extension
- Thinking federated services cannot combine data
type User { id: ID!, name: String }. The Order service tries to extend User with extend type User { orders: [Order] } but the gateway returns an error. What is the likely cause?Solution
Step 1: Check federation key requirement
Federation requires types extended across services to have a @key directive for identification.Step 2: Identify missing @key
User type lacks @key in User service, so gateway cannot resolve extensions.Final Answer:
User type is not marked with @key directive in User service. -> Option AQuick Check:
@key missing causes federation errors [OK]
- Thinking extended types must be fully redefined
- Blaming gateway instead of schema directives
- Assuming fields must be in base service only
Solution
Step 1: Understand federation team ownership
Federation scales by letting teams own services with clear boundaries and keys.Step 2: Identify best practice
Clear @key types and minimal overlap avoid conflicts and enable smooth composition.Final Answer:
Each team owns a service with clear @key types and minimal overlap. -> Option DQuick Check:
Team ownership + @key = scalable federation [OK]
- Thinking one schema file for all teams scales well
- Avoiding @key directives breaks federation
- Centralizing all services under one team limits scaling
