GraphQL vs REST: tutto ciò che devi sapere

Pubblicato: 2022-09-20

Può essere difficile scegliere le tecnologie che saranno incluse nello stack tecnologico del tuo prossimo progetto. In molti casi, e soprattutto quando si tratta di scegliere tra API GraphQL e RESTful, si tratta di scegliere la migliore architettura di progettazione API successiva.

Esistono quattro modi significativi per creare API: SOAP, GRPC, REST e GraphQL. Spesso restringiamo le nostre menti a REST e GraphQL ogni volta che vogliamo creare API. Questo perché REST ha cambiato i modi tradizionali di creare API con SOAP e GRPC.

GraphQL è ampiamente etichettato come un REST migliore perché rappresenta un modo migliore per creare API. Molti sviluppatori ritengono che GraphQL sostituirà REST. Molti altri hanno già scoperto che GraphQL aiuta a risolvere alcune sfide comuni che gli sviluppatori devono affrontare durante la creazione di API REST.

Scopri come scegliere la migliore architettura e modello di progettazione API per il tuo progetto in questa guida Fai clic per twittare

Questi due metodi di creazione delle API sono completamente diversi. In pratica, queste tecnologie funzionano inviando una richiesta HTTP e ricevendo il risultato. Entrambi hanno i loro pro e contro e in questo articolo discuteremo ampiamente di queste due grandi tecnologie che hanno cambiato il modo in cui sviluppiamo e ridimensioniamo le API.

Prima di entrare nei dettagli, tuttavia, esploriamo prima il significato delle API GraphQL e RESTful.

Che cos'è GraphQL?

GraphQL è un linguaggio di query API nonché un runtime per rispondere a tali query con dati esistenti. Inoltre è dotato di potenti strumenti per gestire anche le query più complesse.

La caratteristica centrale di GraphQL è la sua capacità di richiedere e ricevere solo i dati specifici richiesti, niente di più. Ciò rende molto più semplice ridimensionare le tue API insieme alla tua app.

La parte più interessante di GraphQL è la sua capacità di fornire tutti i dati in un unico endpoint.

Uno screenshot di un diagramma di flusso dell'architettura dell'API GraphQL.
Architettura dell'API GraphQL.

Il diagramma sopra è una rappresentazione tipica dell'architettura GraphQL. I clienti effettuano richieste da dispositivi diversi e GraphQL gestisce le loro richieste e restituisce solo i dati richiesti. Questo risolve perfettamente il problema dell'over-fetch e dell'under-fetch nelle API RESTful.

Uno screenshot di un playground GraphQL che mostra una query riuscita.
Una query riuscita in un playground GraphQL.

Nell'esempio precedente, mostriamo un playground GraphQL e come è possibile eseguire query per i dati con un singolo endpoint. In alto c'è l'endpoint API, a sinistra c'è la query che richiede i nomi dei continenti e, infine, a destra, rispondiamo alla query che abbiamo richiesto.

GraphQL è stato creato da Facebook con lo scopo principale di risolvere l'esperienza dello sviluppatore di app mobili mentre lavora con le API REST. Da quando la sua prima versione open source è stata rilasciata nel 2015, GraphQL ha registrato un'enorme crescita grazie all'adozione della tecnologia da parte dei grandi attori del settore tecnologico.

Aziende che utilizzano GraphQL

Di seguito è riportato un elenco di alcune delle aziende e delle applicazioni che utilizzano GraphQL attivamente sui propri server.

Facebook

Facebook ha creato GraphQL e lo ha utilizzato nella produzione per alimentare le proprie app mobili dal 2012. La società di social network multimiliardaria ha reso open source le specifiche GraphQL nel 2015, rendendole accessibili in molti ambienti e a team di tutte le dimensioni .

Uno screenshot della pagina di accesso di Facebook.
Facebook utilizza GraphQL.

GitHub

GitHub annuncia inoltre l'uso di GraphQL fornendo un'API GraphQL per creare integrazioni, recuperare dati e automatizzare i flussi di lavoro utilizzando l'API GitHub GraphQL. L'API GitHub GraphQL offre query più precise e flessibili rispetto all'API REST di GitHub.

Uno screenshot della home page di GitHub.
GitHub utilizza anche GraphQL.

Pinterest

Pinterest è anche uno dei primi ad adottare GraphQL. Il gigante della condivisione di foto ha discusso pubblicamente della loro prima esplorazione di GraphQL e di come utilizzano la tecnologia GraphQL che alimenta la loro azienda da miliardi di dollari.

Uno screenshot della homepage di Pinterest.
Pinterest utilizza GraphQL anche per il proprio sito.

Molte altre aziende da miliardi di dollari come Intuit, Shopify, Coursera e Airbnb alimentano le loro applicazioni con GraphQL. E questa preferenza di vasta portata per REST continua a crescere.

Che cos'è l'API RESTful?

REST sta per "Representational State Transfer", che è uno stile architetturale software per sistemi ipermediali distribuiti. Definisce principi e vincoli per lo scambio di risorse tra il server ei client.

Se questi principi vengono seguiti in un'API, l'applicazione di tale API viene denominata "RESTful". L'API REST di WordPress ne è un ottimo esempio.

Di seguito sono riportati alcuni dei principi e dei vincoli che un'API deve soddisfare per essere definita API Restful:

  • Disaccoppiamento client-server: i client (frontend) e il server (backend) sono completamente separati e possono comunicare solo tramite gli endpoint.
  • Interfaccia uniforme: i dati visualizzati nell'interfaccia sono identici su tutti i dispositivi.
  • Apolidia: il server non ricorda se la richiesta corrente viene effettuata per la prima volta o meno. Ogni volta che viene effettuata una richiesta, è necessario includere tutte le informazioni necessarie per elaborarla da zero.
  • Cacheability: la memorizzazione nella cache e l'archiviazione della sessione sono consentite, ma devono essere configurate per consentire agli utenti finali di disattivare la memorizzazione nella cache dei dati.
  • Architettura del sistema a più livelli: le API devono essere progettate in modo che né il client né il server possano dire se stanno comunicando direttamente o tramite un intermediario.

Il diagramma seguente è dell'architettura REST di base. Mostra come vengono generalmente gestite le richieste e le risposte.

Uno screenshot che mostra un grafico a rami dell'architettura dell'API RESTful.
Architettura dell'API REST.

Vantaggi di GraphQL

Di seguito sono riportati alcuni vantaggi dell'utilizzo di GraphQL, che illustrano perché è più che sufficiente per creare la prossima app da un miliardo di dollari.

Recupero dei dati tramite un singolo endpoint API

Il principale vantaggio di GraphQL è la sua capacità di accedere a uno o tutti i punti dati tramite un singolo endpoint API.

Uno dei problemi più comuni con le API RESTful è avere troppi endpoint per accedere alle informazioni. In GraphQL, hai un solo endpoint, quindi non è necessario inviare più richieste per recuperare informazioni diverse su un oggetto.

Il diagramma seguente illustra un chiaro esempio di recupero di risorse utilizzando l'API RESTful e GraphQL. Puoi vedere che esiste un solo endpoint per accedere alla risorsa nel server GraphQL, mentre sono necessari più endpoint API per accedere a risorse diverse nell'API RESTful.

Un diagramma di flusso che mostra più query nell'API RESTful e come vengono gestite in GraphQL.
Endpoint API in REST e GraphQL.

Nessun prelievo eccessivo o insufficiente

Il problema dell'over o under-fetching è un problema noto con le API RESTful. Questo è quando i client scaricano i dati raggiungendo gli endpoint che restituiscono strutture di dati fisse, oppure recuperano più o meno di quanto previsto.

Il recupero eccessivo fa sì che la richiesta riceva - o "recupero" - più dati di quelli richiesti da una determinata richiesta. Immagina di recuperare tutti gli utenti in una tabella con l'intenzione di visualizzare i loro nomi utente sulla tua home page. In tal caso, l'overfetching restituirà tutti i dati su ciascun utente, incluso (ma non solo) il nome.

L'underfetching è relativamente raro, ma si verifica quando l'endpoint specifico non riesce a fornire tutte le informazioni richieste. Il cliente dovrà effettuare ulteriori richieste per accedere alle altre informazioni secondo necessità.

GraphQL risolve in modo efficiente il problema dell'over-fetching o under-fetch acquisendo l'esatta risorsa richiesta dal cliente senza ulteriori dettagli.

Migliore gestione di sistemi complessi e microservizi

GraphQL può unificare e nascondere la complessità di più sistemi integrati.

Ad esempio, supponiamo di voler migrare da un'applicazione back-end monolitica a un'architettura di microservizi. L'API GraphQL aiuta a gestire la comunicazione tra vari microservizi unendoli in uno schema GraphQL.

Una volta definiti questi schemi, sia il frontend che il backend possono comunicare separatamente senza ulteriori modifiche, poiché il frontend sa che i dati nello schema saranno sempre sincronizzati nel sistema.

Veloce e sicuro

Il problema del recupero eccessivo può comportare un maggiore consumo di larghezza di banda per i client, che potrebbe, nel tempo, causare ritardi nell'applicazione. L'utilizzo dei modelli di progettazione dell'API RESTful richiede più tempo per separare le informazioni necessarie da un enorme carico utile.

Grazie alla capacità di GraphQL di evitare il recupero eccessivo e il recupero insufficiente, il server restituisce una forma sicura, di facile lettura e prevedibile che velocizza le richieste e le risposte API.

I vantaggi del RIPOSO

Nonostante la crescente popolarità di GraphQL, REST è ancora uno degli standard API più popolari. Diamo un'occhiata al perché.

  • Curva di apprendimento: le API RESTful sono le più facili da apprendere e comprendere. Questo è il suo principale vantaggio rispetto ad altre API.
  • Serializzazione: REST viene fornito con un approccio flessibile e formati per la serializzazione dei dati in JSON.
  • Caching: l'API REST può gestire un carico elevato con l'aiuto di un server proxy HTTP e della cache.
  • Richieste complesse: le API REST hanno un endpoint separato per richieste diverse e ciò contribuisce a rendere la richiesta complessa più gestibile rispetto ad altre API
  • Pulito e semplice: le API REST sono eleganti, semplici e pulite. Sono semplici da esplorare.
  • Procedure HTTP standard: REST utilizza chiamate di procedure HTTP standard per recuperare i dati ed effettuare richieste.
  • Client/Server: Ciò significa che la sua logica di business è disaccoppiata dalla presentazione. Quindi puoi cambiarne uno senza influire sull'altro.
  • REST è senza stato: tutti i messaggi scambiati tra client e server hanno tutto il contesto necessario per sapere cosa fare con il messaggio.

Svantaggi di GraphQL

Ora che abbiamo discusso i vantaggi di GraphQL vs REST, esploriamo alcuni degli svantaggi di GraphQL:

  • Curva di apprendimento difficile: GraphQL non è facile da imparare come REST. La parte più impegnativa della creazione di un'API GraphQL è la progettazione dello schema. Ciò richiede molto tempo e conoscenza del dominio.
  • Caricamento file: GraphQL non dispone di una funzione di caricamento file nativa. Questo può essere aggirato utilizzando la codifica Base64, ma il costo della codifica e della decodifica in questo modo può richiedere molto tempo e denaro.
  • Caching Web: la memorizzazione nella cache aiuta a ridurre il traffico frequente al server, accelerando le richieste e il processo di risposta mantenendo le informazioni a cui si accede di frequente vicino al server. GraphQL non supporta né si basa sui metodi di memorizzazione nella cache HTTP, a seconda invece dei meccanismi di memorizzazione nella cache dei client Apollo o Relay.
  • Non adatto per piccole applicazioni: GraphQL potrebbe non essere la migliore architettura API per la creazione di una piccola applicazione. Se la tua app non richiede le query più flessibili offerte da GraphQL, REST è la strada da percorrere.
  • Problema di query complesse: la capacità di GraphQL di fornire a un client esattamente ciò che desidera può anche portare a problemi di propagazione delle query. Se un client invia troppe query nidificate, può portare all'invio di query errate, il che può richiedere molto tempo per il server. È meglio utilizzare REST con endpoint personalizzati per soddisfare tali richieste.

Svantaggi di REST

Ora, rivolgiamo la nostra attenzione ad alcuni degli svantaggi di REST:

Lottando con tempi di inattività e problemi con WordPress? Kinsta è la soluzione di hosting progettata per farti risparmiare tempo! Scopri le nostre caratteristiche
  • Più round trip: il problema più grande con le API REST è la natura di numerosi endpoint. Ciò significa che il client per ottenere tutte le risorse per un'applicazione completa, deve eseguire innumerevoli round trip per ottenere i dati.
  • Over-fetching e Under-fetching: il problema dell'over-fetch e dell'under-fetch è uno dei principali svantaggi delle API RESTful. Può causare ritardi nelle risposte a causa del recupero di grandi payload indesiderati.
  • Gerarchia: poiché le API REST sono basate su risorse di riferimento URI, non sono adatte per risorse che non sono naturalmente organizzate o accessibili in una semplice gerarchia.

Perché usare GraphQL invece di REST

Successivamente, discuteremo del motivo per cui potresti voler prendere in considerazione GraphQL per il tuo futuro sviluppo di API invece dell'API RESTful.

Schema fortemente tipizzato

GraphQL utilizza un sistema di tipi avanzati per definire le capacità dell'API. In GraphQL, lo schema Definition Language (SDL) viene utilizzato per definire i parametri relativi al modo in cui il client accede ai dati del server. Tutte le API esposte al client vengono annotate in SDL, risolvendo il problema di incoerenza dei dati riscontrato nelle API RESTful.

Nessun Over-Fetching o Under-Fetching

Il problema dell'over-o under-fetching è un problema noto con le API RESTful in cui i client ottengono più o meno informazioni di quelle richieste. GraphQL risolve questo problema fornendo al client un mezzo per specificare le informazioni necessarie, quindi restituendo esattamente - e solo - quelle informazioni specifiche.

Endpoint multipli

Uno dei maggiori problemi delle API RESTful è avere troppi endpoint per accedere alle informazioni.

Supponiamo che tu voglia accedere a un particolare utente tramite il suo numero ID. Ti verrebbe presentato un endpoint come /users/1 . Ma se vuoi accedere alle foto di quell'utente, dovrai inviare una richiesta a un altro endpoint, come /users/1/photos .

In GraphQL, hai un singolo endpoint e non è necessario inviare più richieste per recuperare informazioni diverse sull'utente.

GraphQL vs REST Showdown

Infine, esploreremo la principale differenza tra le API GraphQL e RESTful. Successivamente, discuteremo alcune delle caratteristiche di una buona progettazione di API e confronteremo come ciascuna tecnologia le gestisce.

Prestazione

Non c'è dubbio che GraphQL funzioni più velocemente delle API RESTful grazie alla sua capacità di fornire un singolo endpoint per accedere a tutte le tue risorse. Le API RESTful utilizzano più endpoint, il che potrebbe causare latenza di rete.

Complessità delle query

Poiché gli endpoint non sono separati in più endpoint, le query GraphQL possono diventare sempre più complesse nel tempo. Gli endpoint dell'API RESTful, d'altra parte, sono separati, il che limita le API RESTful a query semplici.

Popolarità e supporto della comunità

GraphQL è un modello architettonico API in crescita e un linguaggio di query. Sebbene sia ancora giovane, il suo tasso di adozione e il pool di risorse stanno crescendo rapidamente e le risorse abbondano già per coloro che sono interessati ad impararlo da soli.

REST, invece, vanta già un vasto supporto da parte della community e continua ad essere utilizzato da aziende di ogni tipo, da quelle che realizzano piccoli microservizi a quelle che creano app social complesse e oltre.

Al momento, il concorso di popolarità tra GraphQL e REST è un pareggio. Entrambe le tecnologie continuano ad essere ampiamente utilizzate e ben supportate dalla comunità di sviluppo.

Curva di apprendimento

La curva di apprendimento per GraphQL è ripida. Richiede una buona conoscenza del dominio dello sviluppo di API e dell'ingegneria del software generale. Un principiante assoluto avrà difficoltà a comprendere GraphQL abbastanza bene da creare un'applicazione complessa.

Al contrario, REST è molto facile da iniziare e richiede una minore conoscenza del dominio fin dall'inizio. L'API RESTful è ben integrata nella maggior parte dei principali linguaggi di programmazione e framework popolari, il che rende l'apprendimento molto semplice.

Uno screenshot che mostra il confronto tra GraphQL e API RESTful.
GraphQL vs REST.

Riepilogo

GraphQL è una nuova tecnologia che segue le tracce dei modelli architetturali dell'API RESTful, proprio come REST è stato introdotto per risolvere i problemi con i modelli dell'API SOAP.

GraphQL offre risposte più rapide, un unico endpoint API per tutte le tue query e uno schema rigoroso per un accesso coerente ai dati. Questi motivi sono ciò che ha portato le aziende multimiliardarie a iniziare a passare a GraphQL, anche nella fase iniziale. Tuttavia, nonostante i suoi limiti, il capostipite di GraphQL REST continua a mantenere una forte presenza sul palco.

API GraphQL o RESTful? Scopri di più in questa guida Fai clic per twittare

In questa guida, abbiamo esplorato tutto ciò che devi sapere sulle API GraphQL e RESTful, inclusi i vantaggi e gli svantaggi di ciascuna tecnologia, per aiutarti a decidere con sicurezza quale preferisci. Abbiamo anche discusso dei problemi noti con le API RESTful, come il recupero eccessivo, il recupero insufficiente e gli endpoint multipli, e come GraphQL tenta di risolvere questi problemi e migliorare le prestazioni dell'app.

Ora hai abbastanza informazioni per scegliere se GraphQL vs REST è appropriato per il tuo prossimo progetto. Facci sapere nella sezione commenti cosa costruirai con il vincitore scelto!