GraphQL vs REST: When to Use Which

The GraphQL hype has died down. Let's have a real conversation about when each makes sense.

The Great API Debate

A few years ago, GraphQL was going to replace REST everywhere. That... didn't happen. Now that the hype has cooled, let's talk about when each actually makes sense.

Quick Refresher

**REST**:

GET /api/users/123
GET /api/users/123/posts
GET /api/users/123/followers

**GraphQL**:

query {
  user(id: 123) {
    name
    email
    posts { title }
    followers { name }
  }
}

When REST Wins

Simple CRUD APIs

If you're building a straightforward resource-based API, REST is simpler:

// This is perfectly fine
app.get('/api/products', getProducts);
app.get('/api/products/:id', getProduct);
app.post('/api/products', createProduct);
app.put('/api/products/:id', updateProduct);
app.delete('/api/products/:id', deleteProduct);

No schema to maintain, no resolvers to write. Just endpoints.

Caching

REST's URL-based caching is dead simple. GraphQL caching is... complicated.

Public APIs

Most developers know REST. GraphQL has a learning curve. If you want easy adoption, stick with REST.

When GraphQL Wins

Complex Data Requirements

When your frontend needs data from multiple related resources, GraphQL shines:

query DashboardData {
  currentUser {
    name
    notifications { message, read }
    recentOrders { 
      id
      items { name, price }
      status
    }
  }
  systemStats { activeUsers, revenue }
}

One request instead of 5. No over-fetching, no under-fetching.

Mobile Apps

Bandwidth matters on mobile. Getting exactly what you need is valuable:

# Mobile app only needs basics
query { user { name, avatar } }

# Desktop wants more
query { user { name, avatar, email, bio, socialLinks } }

Rapid Frontend Development

When frontend devs can get exactly the data they need without backend changes? That's powerful for iteration speed.

My Approach

For most projects, I start with REST. It's familiar, well-understood, and easier to maintain.

I reach for GraphQL when:

  • Multiple clients with different data needs
  • Deeply nested relational data
  • High API change velocity

Neither is universally better. Use the right tool for your situation.

What's your take? I'd love to hear real-world experiences in the Discord.

Back to Journal