After 6 years, I'm over GraphQL
Where GraphQL Fits (and Where It Doesn’t)
- Many think GraphQL fits Facebook-like cases: huge app, many teams/clients, deeply linked social graph, strict auth, mostly logged‑in users, BFF layer over many services.
- For typical CRUD apps, small–medium teams, or simple public APIs, commenters say REST/RPC is simpler, more observable, and “good enough.”
- Several report adopting GraphQL, then later reverting to REST or RPC while keeping only “schema as contract” and type generation.
- Others report long‑running GraphQL deployments that work well, especially when using DB‑driven tools (Hasura, PostGraphile) or as an internal aggregation layer.
Security, Auth & Rate Limiting
- Exposing a flexible, introspectable query API increases the attack surface:
- Need field‑level auth, query depth/complexity limits, and rate‑limiting beyond “requests per endpoint.”
- Potential DoS via deeply nested or fan‑out queries; parsing itself can be an attack vector.
- Some mitigate with persisted/whitelisted queries, role‑based RLS in the DB, and GraphQL “trusted documents.”
- Critics argue that once you whitelist queries, you’re close to REST with extra complexity.
Performance, N+1 & Caching
- N+1 is a recurring pain: nested resolvers cause many DB/API calls. Solutions: dataloaders, SQL compilation, DB‑centric tools.
- Disagreement on severity: some see N+1 as fatal and constant; others call it overblown if data volume and query shapes are bounded.
- HTTP caching, logging, and network debugging are widely seen as easier with REST (distinct URLs, status codes with clear semantics).
Developer Experience & Tooling
- Frontend devs like: self‑documenting schema, strong typing, GraphiQL, fragments, and the ability to ask for just needed fields.
- Backend devs often dislike: resolver boilerplate, mixed business logic and data loading, complex auth, and debugging query performance.
- Apollo/Relay clients offer powerful normalized caches and co-located data requirements, but can be hard to reason about and debug.
Alternatives & Patterns
- Common alternatives: REST + OpenAPI, tRPC, gRPC/Buf Connect, OData, JSON‑RPC, EdgeDB, DB‑backed auto‑CRUD (PostgREST, Hasura, PostGraphile), BFFs, Remix/Next loaders.
- Several see GraphQL as solving organizational problems (frontend–backend coordination) more than technical ones; others argue that’s precisely its value at scale.
Overall Sentiment
- Majority sentiment in this thread trends skeptical: GraphQL is powerful but high‑cost, often misapplied, and rarely the default best choice.
- A substantial minority report strong success where constraints match (many clients, complex graphs, good tooling, disciplined schema and auth).