GraphQL: query language flessibile per API

GraphQL (open source luglio 2015) di Facebook: query language per API, type system, singolo endpoint, client specifica cosa serve. Apollo Server/Client, Relay, Hasura. Alternativa a REST per aggregazione dati multi-sorgente.

Open SourceWeb GraphQLFacebookMetaApolloRelayAPIOpen SourceWeb

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 /graphql per 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).

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi