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. Licenza MIT.
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)
Composizione e gateway
- Schema stitching — composizione di più schemi GraphQL in un super-schema
- GraphQL Mesh (in ideazione) — gateway multi-source
Nel contesto italiano
GraphQL si sta diffondendo in progetti headless e-commerce, media publishing, mobile app con BFF e admin tools interni per aggregazione dati multi-sorgente.
Riferimenti: GraphQL Open Source (14 luglio 2015). Facebook/Meta. Lee Byron, Dan Schafer, Nick Schrock. Licenza MIT. Apollo Server/Client.
