The Over-Fetching and Under-Fetching Problem
REST APIs return fixed data structures. If a mobile app only needs a user’s name and avatar, a REST endpoint might return 40 fields — bandwidth wasted. Conversely, displaying a user’s posts with author details requires multiple round-trips. GraphQL solves both problems.
How GraphQL Works
With GraphQL, the client specifies exactly what data it needs in a single query. The server returns precisely that structure — nothing more, nothing less.
query GetUserProfile {
user(id: "123") {
name
avatar
recentPosts(limit: 3) {
title
publishedAt
}
}
}
When to Choose REST
Choose REST for simple CRUD operations, public APIs consumed by unknown clients, and systems where HTTP caching is critical. REST’s simplicity and wide tooling support make it the right default for most projects.
When to Choose GraphQL
Choose GraphQL for complex, data-rich frontends — dashboards, mobile apps with varying data needs, and real-time subscriptions. The upfront schema design investment pays off quickly in reduced over-fetching.