Il limite di REST
Le API REST tipiche hanno due problemi per client mobile/SPA:
- Over-fetching — endpoint restituisce più dati di quelli necessari
- Under-fetching — un’operazione richiede chiamate a N endpoint
Facebook interno (2012) sviluppa GraphQL per alimentare l’app mobile iOS/Android con dati eterogenei (profile, feed, notifiche) in una singola chiamata ottimizzata.
Il rilascio
GraphQL spec è rilasciato come open source da Facebook il 14 luglio 2015. Lead: Lee Byron, Dan Schafer, Nick Schrock. La prima versione stabile arriva nel 2016. Licenza MIT; spec governata dalla GraphQL Foundation (Linux Foundation) dal 2018.
Concetti
- Schema — type system fortemente tipato con scalar, object, interfaces, unions, enums
- Query — read operation, il client specifica forma dei dati
- Mutation — write operation
- Subscription — stream real-time (tipicamente su WebSocket)
- Resolver — funzioni server che risolvono ogni field
type User {
id: ID!
name: String!
posts: [Post!]!
}
query {
user(id: "123") {
name
posts { title }
}
}
Vantaggi
- Singolo endpoint
/graphqlper tutto - Client-specified data — no over/under-fetching
- Typed schema — introspection, tooling
- Versionless — evoluzione via deprecation
- Strong tooling — GraphiQL, Apollo Studio, Insomnia, Postman
Svantaggi
- N+1 queries — resolver naif devastanti; richiede DataLoader
- Caching — più complesso di REST/HTTP cache
- Complexity attacks — query profonde costose; serve depth limit, cost analysis
- Over-engineering per API semplici
Implementazioni
- graphql-js — reference, Node.js
- Apollo Server/Client — ecosystem più diffuso
- Relay — client Meta per React
- Hasura — GraphQL auto-generato da Postgres
- PostGraphile — Postgres → GraphQL
- Strawberry (Python), graphql-ruby, sangria (Scala), graphql-java, HotChocolate (.NET)
Federation e Gateway
- Apollo Federation (2019, v1) / (2021, v2) — composizione di sub-graph in super-graph
- Schema stitching — approccio precedente
- GraphQL Mesh — gateway multi-source
Declino relativo 2022-2026
Dopo l’entusiasmo 2016-2020, molte aziende tornano a REST, tRPC, OpenAPI-first. Motivi:
- Apollo che diventa più commerciale
- Complessità operativa
- HTTP caching più difficile
- Netflix, Twitter deprezzano uso interno
- tRPC offre type safety end-to-end per stack TypeScript fullstack
GraphQL resta dominante dove serve aggregazione multi-source (BFF, API composition, pubblicate dev portal).
Nel contesto italiano
GraphQL è usato in:
- E-commerce Magento/Shopify/Commercetools (headless)
- Media publishing (Mediaset, GEDI)
- Mobile app italiane con BFF GraphQL
- Admin tools interni per composizione dati
Riferimenti: GraphQL open source (14 luglio 2015). Facebook/Meta. Lee Byron, Dan Schafer, Nick Schrock. GraphQL Foundation (2018). Apollo Server/Client ecosistema. Apollo Federation v2 (2021).
