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

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.

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