GraphQL solved over-fetching + under-fetching. But introduced N+1 queries + complex caching. Understanding the architecture prevents pitfalls.

Clientspecific queryGraphQL ServerQuery ParserValidatorExecution EngineResolver ChainDataLoaderbatches N+1Schematypes + queriesData SourcesDB, API, cacheCache LayerAuth + Rate Limit
GraphQL: parser → validator → resolvers with DataLoader batching
Advertisement

Query language

Client specifies exact shape needed. Reduces over-fetching. Enables schema stitching for federated services.

Query language

Client specifies exact shape needed. Reduces over-fetching. Enables schema stitching for federated services.

Advertisement

Resolvers

Each field has a resolver function. Parent's return value + args → this field's value. Composable.

N+1 problem

Query for 100 users. Each user has posts. Naive resolver: 1 query for users + 100 queries for posts. Catastrophic.

DataLoader pattern

Batch + cache per request. Collect all post IDs needed → single batched query → distribute results back. 100 queries → 2.

Caching complexity

Every query is unique. HTTP cache doesn't work. Persisted queries + custom fingerprinting or normalized cache (Apollo, Relay).

Schema + resolvers + DataLoader. Watch N+1. Caching is on you, not HTTP.