System Design Series — Part 25
Imagine you're building an e-commerce application.
The homepage needs to display:
- Product name
- Price
- Product image
- Average rating
- Seller name
Your frontend calls a REST API:
GET /products/101
The server responds with:
- Product description
- SKU
- Weight
- Dimensions
- Stock history
- Created date
- Updated date
- Supplier information
- Warehouse details
- ...and 20 more fields.
But your page only needs five.
The rest of the data travels across the network for no reason.
Now imagine millions of users making the same request every day.
That's a lot of unnecessary data.
This is one of the problems GraphQL was created to solve.
Let's understand it in the simplest way possible.
The Real Problem
Imagine you're building an Instagram profile page.
The UI needs:
- Username
- Profile picture
- Followers count
- Latest 10 posts
With a traditional REST API, you might call:
GET /users/101
GET /users/101/posts
GET /users/101/followers
Multiple requests.
More network traffic.
Higher latency.
Slower page loads.
Can we get everything in one request?
Yes.
That's exactly what GraphQL does.
A Simple Real-World Analogy
Imagine you're ordering food.
REST API
The waiter brings you a fixed meal.
You only wanted rice and paneer.
But you also receive soup, salad, dessert, and drinks.
You paid for—and received—more than you needed.
GraphQL
The waiter asks:
"What exactly would you like?"
You order:
✔ Rice
✔ Paneer
✔ Coke
Nothing more.
Nothing less.
That's GraphQL.
You request exactly the data you need.
What is GraphQL?
GraphQL is a query language for APIs developed by Facebook.
Instead of exposing many endpoints,
GraphQL exposes a single endpoint.
The client decides:
- Which fields it wants
- How much data it needs
- Which related objects should be returned
The server simply delivers exactly that.
How GraphQL Works
Step 1
Client sends a query.
↓
Step 2
GraphQL Server receives it.
↓
Step 3
Resolvers fetch data.
↓
Step 4
Database is queried.
↓
Step 5
Only requested fields are returned.
No unnecessary data.
REST vs GraphQL
REST
Different endpoints.
GET /users
GET /posts
GET /comments
Multiple requests.
Fixed responses.
GraphQL
Single endpoint.
POST /graphql
Client decides:
- Which objects
- Which fields
- Which relationships
One request.
Custom response.
Real-World Example
Suppose you're building a product page.
Frontend only needs:
- Product Name
- Price
- Rating
GraphQL Query:
Product
- Name
- Price
- Rating
Server returns only those fields.
No extra data.
This reduces network usage and improves performance.
Another Example: Netflix
Imagine Netflix loads the home screen.
It needs:
- User profile
- Continue Watching
- Trending Movies
- Recommendations
With REST:
Multiple API calls.
With GraphQL:
One query can fetch everything.
Fewer requests.
Faster loading.
Why Do Companies Use GraphQL?
GraphQL solves two common REST problems.
Over-Fetching
Receiving more data than required.
Example:
Need:
Name
Receive:
Name + 30 unnecessary fields.
Under-Fetching
One API doesn't provide enough data.
Frontend must call multiple APIs.
This increases latency.
GraphQL solves both.
GraphQL Schema
Every GraphQL API defines a schema.
The schema describes:
- Available objects
- Relationships
- Fields
- Operations
Think of it as the contract between frontend and backend.
Queries and Mutations
GraphQL mainly uses two operations.
Query
Retrieve data.
Equivalent to:
GET
Mutation
Create, update, or delete data.
Equivalent to:
POST
PUT
DELETE
Production Architecture
A typical GraphQL architecture looks like this:
Users
↓
CDN
↓
Load Balancer
↓
GraphQL Server
↓
Business Services
↓
Redis Cache
↓
Database
The GraphQL server acts as an orchestration layer between clients and backend services.
Real-World Companies Using GraphQL
Many large companies use GraphQL.
Examples include:
- GitHub
- Shopify
- Airbnb
It's especially popular for applications with complex user interfaces.
Advantages of GraphQL
✔ Single API endpoint
✔ Client requests exactly the data it needs
✔ Reduces over-fetching
✔ Reduces under-fetching
✔ Faster frontend development
✔ Great for mobile applications
✔ Excellent developer experience
Challenges of GraphQL
More Complex Backend
Resolvers and schema management require additional effort.
Caching Is Harder
REST endpoints are easier to cache.
GraphQL queries are more dynamic.
Query Complexity
Clients can accidentally request huge datasets.
Production systems often enforce:
- Query depth limits
- Rate limiting
- Complexity analysis
Security
Field-level authorization becomes important.
Users should only access data they are allowed to see.
GraphQL vs REST
Choose REST when:
✔ APIs are simple
✔ Resources are well defined
✔ HTTP caching is important
✔ Public APIs need simplicity
Choose GraphQL when:
✔ Frontends need flexible data
✔ Mobile apps must minimize bandwidth
✔ Complex dashboards require multiple resources
✔ Many client applications consume the same backend
There is no universally "better" choice.
Choose the right tool for the problem.
Common Developer Mistakes
Returning Everything
GraphQL allows flexibility.
Don't ignore performance.
Ignoring Query Limits
Large nested queries can overload servers.
Poor Schema Design
A poorly designed schema becomes difficult to maintain.
Forgetting Authorization
Every field should be secured appropriately.
Production-Level Insight
One misconception is:
"GraphQL replaces REST."
It doesn't.
Many companies successfully use both.
For example:
REST APIs for public integrations.
GraphQL for web and mobile applications.
Good architects choose the technology that best fits the business requirements—not the latest trend.
Interview Tip
A common System Design interview question is:
"GraphQL vs REST: Which one would you choose?"
A strong answer should discuss:
- Over-fetching
- Under-fetching
- Single endpoint
- Client-driven queries
- Caching
- Complexity
- Performance trade-offs
Interviewers are looking for architectural reasoning, not technology preference.
Key Takeaways
✔ GraphQL is a query language for APIs
✔ Clients request exactly the data they need
✔ It reduces over-fetching and under-fetching
✔ A single endpoint can serve multiple use cases
✔ GraphQL is ideal for complex frontends and mobile apps
✔ REST and GraphQL can coexist in the same system
✔ Choose the technology based on your application's requirements
One of the biggest lessons in System Design is this:
The best API isn't the one with the most features.
It's the one that delivers exactly what the client needs—nothing more, nothing less.
That's why GraphQL has become an important tool for building modern, scalable applications.
This is Part 25 of the System Design Simplified series.
Next Article: Part 26 — API Versioning Explained Simply
If this article helped you understand GraphQL better, consider sharing it with fellow developers.
#SystemDesign #GraphQL #SoftwareArchitecture #BackendDevelopment #APIDesign #RESTAPI #DistributedSystems #Microservices #Scalability #CloudComputing #SoftwareEngineering #SystemDesignInterview #BackendEngineer #Programming #TechArchitecture