Guida Tecnica

REST vs GraphQL

Sono i due modi principali di progettare un'API moderna. REST espone risorse a indirizzi fissi; GraphQL ti fa chiedere esattamente i dati che servono, in un'unica richiesta. Nessuno dei due è "migliore": dipende dal progetto. Ecco il confronto onesto, con i criteri per scegliere.

Blog Contat7 min di lettura

REST: risorse e verbi

Ogni cosa ha un indirizzo (/clienti/42) e si opera con i verbi HTTP: GET legge, POST crea, PUT modifica, DELETE elimina.

GraphQL: chiedi il necessario

Un solo endpoint, query che descrivono esattamente i campi voluti: niente dati in eccesso, niente richieste multiple.

REST è lo standard di fatto

La stragrande maggioranza delle API pubbliche è REST: pagamenti, spedizioni, social. Ogni sviluppatore lo conosce.

GraphQL nasce per le app

Creato da Facebook nel 2015 per schermate mobili che aggregano tanti dati: una query invece di dieci chiamate.

Cache vs flessibilità

REST sfrutta la cache HTTP in modo naturale; GraphQL scambia questa semplicità con la flessibilità delle query.

Possono convivere

Molti progetti usano REST per le integrazioni esterne e GraphQL per alimentare le proprie interfacce. Non è una guerra di religione.

REST vs GraphQL

Due filosofie diverse per lo stesso problema: far arrivare i dati giusti a chi li chiede. Il confronto punto per punto.

REST: risorse a indirizzi fissi
REST: risorse a indirizzi fissi

Come funziona REST: il menù a piatti fissi

REST organizza l'API attorno alle risorse: clienti, ordini, prodotti. Ogni risorsa ha un indirizzo (endpoint) e si manipola con i verbi HTTP: GET /clienti/42 legge il cliente, POST /ordini ne crea uno, DELETE /prodotti/7 lo elimina. Se le API sono nuove per te, parti dalla guida Cosa sono le API.

È come un menù a piatti fissi: ogni piatto (endpoint) ha una composizione decisa dallo chef. Ordini "il cliente 42" e ricevi tutti i suoi campi, anche quelli che non ti servivano (over-fetching); se ti serve anche la lista dei suoi ordini, fai una seconda chiamata (under-fetching). In cambio ottieni semplicità totale: URL prevedibili, cache HTTP che funziona da sola, strumenti maturi ovunque. Per le API pubbliche e le integrazioni tra sistemi resta lo standard indiscusso.

GraphQL: una query, solo i campi richiesti
GraphQL: una query, solo i campi richiesti

Come funziona GraphQL: il buffet con il carrello

GraphQL ribalta il controllo: un solo endpoint e uno schema tipizzato che descrive tutti i dati disponibili. Il client scrive una query dichiarando esattamente cosa vuole: "del cliente 42 dammi nome, email e gli ultimi 5 ordini con data e totale". Il server risponde con precisamente quei campi, niente di più, in un'unica richiesta.

È il buffet con il carrello: prendi solo quello che ti serve, in un giro solo. Per le app mobili — dove ogni richiesta costa batteria e ogni byte conta — è un vantaggio concreto: la schermata che con REST richiedeva cinque chiamate diventa una query sola. Il conto arriva lato server: ogni campo richiede un resolver, le query troppo profonde vanno limitate per non mettere in ginocchio il database, e la cache va progettata invece di venire gratis dall'HTTP.

REST è il menù a piatti fissi: semplice e collaudato. GraphQL è il buffet: prendi solo ciò che serve, ma la cucina è più complessa.

Progettazione API
REST fuori, GraphQL dentro: la scelta pragmatica
REST fuori, GraphQL dentro: la scelta pragmatica

Quando l'uno, quando l'altro

I criteri che usiamo nei progetti reali:

  • Scegli REST se: l'API è pubblica o consumata da partner (tutti lo conoscono), i flussi sono fissi e prevedibili (integrazione gestionale ↔ e-commerce), la cache HTTP conta (contenuti, cataloghi), il team è piccolo e la semplicità vale oro. In caso di dubbio: REST.
  • Scegli GraphQL se: alimenti interfacce ricche che aggregano molti dati (dashboard, app mobili complesse), hai client diversi con esigenze diverse sugli stessi dati, lo schema evolve spesso e vuoi evitare il versionamento.
  • Usali insieme se: il progetto è grande — REST verso l'esterno per compatibilità universale, GraphQL all'interno per le proprie interfacce. È un pattern comune e sano.

Nei nostri progetti — web app, gestionali, e-commerce — usiamo REST come base e introduciamo GraphQL solo quando le schermate lo giustificano. E se hai un'API esistente che non sai più come evolvere o mantenere, il servizio di assistenza sito web include anche il check-up delle integrazioni.

Il posto nella storia: da SOAP a REST a GraphQL (e oltre)

REST e GraphQL sono capitoli della stessa storia. Prima c'era SOAP, rigido e verboso, con le sue buste XML: REST vinse puntando sulla semplicità del web. GraphQL è nato quando le app mobili hanno reso costoso il modello a risorse fisse. E oggi il capitolo nuovo è l'AI: con il Model Context Protocol, le API — REST o GraphQL che siano — vengono esposte come strumenti che un modello linguistico scopre e usa da solo. Curiosamente, lo schema tipizzato e autodocumentato di GraphQL anticipava proprio l'esigenza che MCP ha reso centrale: contratti che si descrivono da soli. Abbiamo ricostruito tutta la genealogia — SOAP, WSDL, JSON-RPC, MCP — in Differenza tra API e MCP.

Domande su REST e GraphQL

REST (Representational State Transfer) è lo stile architetturale dominante per le API web: le risorse (clienti, ordini, prodotti) hanno indirizzi URL e si manipolano con i verbi HTTP — GET per leggere, POST per creare, PUT/PATCH per modificare, DELETE per eliminare.
GraphQL è un linguaggio di query per API creato da Facebook nel 2015: un unico endpoint espone uno schema tipizzato di tutti i dati disponibili, e ogni client richiede esattamente i campi che gli servono in una sola richiesta.
No: è diverso. GraphQL brilla per interfacce ricche che aggregano molti dati (app mobili, dashboard); REST vince per semplicità, cache e universalità nelle API pubbliche e nelle integrazioni fisse. La maggior parte dei progetti sta benissimo con REST.
Over-fetching: l'endpoint REST restituisce più campi di quelli che servono, sprecando banda. Under-fetching: una schermata ha bisogno di più endpoint e quindi di più chiamate. Sono i due problemi che GraphQL è nato per risolvere con le query su misura.
Sì, ed è un pattern comune: REST verso l'esterno (partner e integrazioni, dove la compatibilità universale conta) e GraphQL all'interno (per alimentare le proprie interfacce con query su misura). Non è necessario scegliere una religione.
REST come base, perché copre bene la maggior parte dei casi con costi e complessità minori. GraphQL quando le schermate aggregano molti dati e le chiamate multiple diventano un collo di bottiglia misurato. La scelta la facciamo sui requisiti, non sulla moda.

Devi progettare o sistemare un'API?

Progettiamo API REST e GraphQL per gestionali, e-commerce e app — e rimettiamo in sesto quelle esistenti con audit e manutenzione.

Ultimo aggiornamento: