Qual è la differenza tra GraphQL e REST?

GraphQL e REST sono due approcci distinti alla progettazione di API per lo scambio di dati su Internet. REST consente alle applicazioni client di scambiare dati con un server utilizzando i verbi HTTP, che è il protocollo di comunicazione standard di Internet. D'altra parte, GraphQL è un linguaggio di query API che definisce le specifiche di come un'applicazione client deve richiedere dati da un server remoto. Puoi utilizzare GraphQL nelle tue chiamate API senza fare affidamento sull'applicazione lato server per definire la richiesta. Sia GraphQL che REST sono potenti tecnologie alla base della maggior parte delle nostre applicazioni moderne.

Ulteriori informazioni su REST »

Maggiori informazioni sull'implementazione di GraphQL »

Quali sono le similitudini tra GraphQL e REST?

Sia GraphQL che REST sono stili di architettura API popolari che consentono lo scambio di dati tra diversi servizi o applicazioni in un modello client-server.

Le API facilitano l'accesso ai dati e le operazioni sui dati in questo modo:

  1. Un client invia una richiesta API a uno o più endpoint su un server
  2. Il server fornisce una risposta che contiene dati, stato dei dati o codici di errore

REST e GraphQL consentono di creare, modificare, aggiornare ed eliminare dati su un'applicazione, un servizio o un modulo separato tramite API. Le API sviluppate con REST sono note come API RESTful o REST API. Quelle sviluppate con GraphQL sono semplicemente API GraphQL.

I team di front-end e back-end utilizzano queste architetture API per creare applicazioni modulari e accessibili. L'utilizzo di un'architettura API aiuta a mantenere i sistemi sicuri, modulari e scalabili. Inoltre, rende i sistemi più performanti e più facili da integrare con altri sistemi.

Successivamente, discutiamo di alcune altre somiglianze tra GraphQL e REST.

Ulteriori informazioni sulle API »

Architettura

Sia REST che GraphQL implementano diversi principi architetturali API comuni. Ad esempio, ecco i principi che condividono:

  • Entrambi sono stateless, quindi il server non salva la cronologia delle risposte tra le richieste
  • Entrambi utilizzano un modello client-server, quindi le richieste di un singolo client generano risposte da un singolo server
  • Entrambi sono basati su HTTP, poiché HTTP è il protocollo di comunicazione sottostante

Progettazione basata sulle risorse

REST e GraphQL progettano entrambi lo scambio di dati in base alle risorse. Una risorsa si riferisce a qualsiasi dato o oggetto a cui il client può accedere e manipolare tramite l'API. Ogni risorsa ha il proprio identificatore univoco (URI) e una serie di operazioni (metodi HTTP) che il client può eseguire su di essa.

Ad esempio, considera un'API per social media in cui gli utenti creano e gestiscono post. In un'API basata sulle risorse, un post sarebbe una risorsa. Ha un proprio identificatore univoco, ad esempio /posts/1234. E ha una serie di operazioni, come GET per recuperare il post in REST o query per recuperare il post in GraphQL.

Scambio dati

Sia REST che GraphQL supportano formati di dati simili.

JSON è il formato di scambio di dati più diffuso che tutti i linguaggi, le piattaforme e i sistemi comprendono. Il server restituisce i dati JSON al client. Sono disponibili altri formati di dati ma meno comunemente usati, inclusi XML e HTML.

Allo stesso modo, REST e GraphQL supportano entrambi la memorizzazione nella cache. Pertanto, client e server possono memorizzare nella cache i dati a cui si accede di frequente per aumentare la velocità di comunicazione.

Ulteriori informazioni su JSON »

Neutralità della lingua e del database

Sia le API GraphQL che le REST API funzionano con qualsiasi struttura di database e qualsiasi linguaggio di programmazione, lato client e lato server. Questo li rende altamente interoperabili con qualsiasi applicazione.

Quali limitazioni REST prova a superare GraphQL?

GraphQL è nato nel 2012 come risposta all'esigenza di velocità nelle piattaforme di social media emergenti. Gli sviluppatori hanno scoperto che le architetture API esistenti, come REST, erano troppo lunghe e strutturate per produrre feed di notizie in modo efficiente.

Successivamente, discutiamo di alcune delle sfide che hanno dovuto affrontare.

Scambio di dati a struttura fissa

La REST API richiede che le richieste dei client seguano una struttura fissa per ricevere una risorsa. Questa struttura rigida è facile da usare, ma non è sempre il mezzo più efficiente per scambiare esattamente i dati necessari.

Eccedente e insufficiente

Le REST API restituiscono sempre un set di dati completo. Ad esempio, da un oggetto person nella REST API, riceverai il nome, la data di nascita, l'indirizzo e il numero di telefono della persona. Otterrai tutti questi dati anche se ti servisse solo un numero di telefono.

Allo stesso modo, se desideri conoscere il numero di telefono e l'ultimo acquisto di una persona, avresti bisogno di più richieste REST API. L'URL /person restituirà il numero di telefono e l'URL /purchase restituirà la cronologia degli acquisti.

Gli sviluppatori di social media hanno dovuto scrivere molto codice solo per elaborare le richieste API, il che ha influito sulle prestazioni e sull'esperienza utente.

GraphQL è emersa come una soluzione basata su query. Le query possono restituire i dati esatti in un solo scambio di richieste e risposte API.

Principali differenze tra GraphQL e REST

Una REST API è un concetto architettonico per la comunicazione delle applicazioni. D'altra parte, GraphQL è una specifica, un linguaggio di query API e un set di strumenti. GraphQL opera su un singolo endpoint utilizzando HTTP.

Inoltre, lo sviluppo di REST si è concentrato maggiormente sulla creazione di nuove API. Nel frattempo, l'attenzione di GraphQL si è concentrata sulle prestazioni e sulla flessibilità delle API.

Di seguito sono riportate altre differenze.

Richiesta lato cliente

Ecco cosa utilizza una richiesta REST per funzionare: 

  • Verbi HTTP che determinano l'azione
  • Un URL che identifica la risorsa su cui eseguire l'azione del verbo HTTP
  • Parametri e valori da analizzare, se si desidera creare o modificare un oggetto all'interno di una risorsa esistente sul lato server

Ad esempio, si utilizza GET per ottenere dati di sola lettura da una risorsa, POST per aggiungere una nuova voce di risorsa o PUT per aggiornare una risorsa.

Al contrario, ecco cosa utilizzano le richieste GraphQL:

  • Query per ottenere dati di sola lettura
  • Mutazione per la modifica dei dati
  • Sottoscrizione per ricevere aggiornamenti dei dati basati su eventi o in streaming

Un formato di dati descrive il modo in cui desideri che il server restituisca i dati, inclusi oggetti e campi che corrispondono allo schema lato server. Puoi anche inserire nuovi dati. Internamente, GraphQL invia ogni richiesta del client come richiesta HTTP POST.

Dati restituiti al client

Nell'architettura REST, i dati vengono restituiti al client dal server nell'intera struttura delle risorse specificata dal server. Gli esempi seguenti mostrano i dati restituiti in REST e GraphQL.

Esempio di dati restituiti in REST

In REST, GET /posts restituisce quanto segue:

[

  {

    "id": 1,

    "title": "First Post",

    "content": "This is the content of the first post."

  },

  {

    "id": 2,

    "title": "Second Post",

    "content": "This is the content of the second post."

  },

  {

    "id": 3,

    "title": "Third Post",

    "content": "This is the content of the third post."

  }

]

Esempio di dati restituiti in GraphQL

Quando si utilizza GraphQL, vengono restituiti solo i dati specificati nella struttura fornita dal client.

GET /graphql?query{post(id: 1) {id title content}} restituisce solo il primo post:

{

  "data": {

    "posts": [

      {

        "id": "1",

        "title": "First Post",

        "content": "This is the content of the first post."

      },

]}}

Schema lato server

GraphQL utilizza uno schema lato server per definire dati e servizi di dati, che differisce da una REST API.

Lo schema, scritto nel linguaggio di definizione dello schema GraphQL, include dettagli come questi:

  • Tipi di oggetto e campi che appartengono a ciascun oggetto
  • Funzioni di risoluzione lato server che definiscono un'operazione per ogni campo

Lo schema definisce in modo esplicito i tipi per descrivere tutti i dati disponibili nel sistema e come i client possono accedervi o modificarli. 

D'altra parte, le REST API non richiedono uno schema lato server. Ma puoi definirlo facoltativamente per la progettazione efficiente delle API, la documentazione e lo sviluppo dei client. 

Controllo delle versioni

Con l'evoluzione delle API, le loro strutture di dati e le loro operazioni possono cambiare. Per i clienti che non sono a conoscenza di queste modifiche, può danneggiare i loro sistemi o introdurre errori sconosciuti.

Le REST API spesso includono il controllo delle versioni nell'URL per risolvere questo problema, ad esempio https://example.com/api/v1/person/12341. Tuttavia, il controllo delle versioni non è obbligatorio e può causare errori. 

GraphQL richiede la compatibilità con le versioni precedenti delle API. Quindi i campi eliminati restituiscono un messaggio di errore o quelli con un tag obsoleto restituiscono un avviso.

Gestione degli errori

GraphQL è un'architettura API fortemente tipizzata, il che significa che richiede una descrizione dettagliata dei dati, della loro struttura e delle operazioni sui dati nello schema. Grazie al livello di dettaglio dello schema, il sistema è in grado di identificare automaticamente gli errori di richiesta e fornire messaggi di errore utili. 

Le REST API sono debolmente tipizzate ed è necessario integrare la gestione degli errori nel codice circostante. Ad esempio, se una richiesta PUT analizza un valore numerico come testo anziché come numero intero, il sistema non identifica automaticamente l'errore.

Quando usare GraphQL e REST

È possibile utilizzare le API GraphQL e le REST API in modo intercambiabile. Tuttavia, ci sono alcuni casi d'uso in cui l'uno o l'altro si adatta meglio.

Ad esempio, GraphQL è probabilmente una scelta migliore se:

  • La larghezza di banda è limitata e desideri ridurre al minimo il numero di richieste e risposte
  • Hai più origini dati e desideri combinarle in un unico endpoint
  • Hai richieste da parte dei client che variano in modo significativo e ti aspetti risposte molto diverse

 

D'altra parte, REST è probabilmente una scelta migliore se:

  • Hai applicazioni più piccole con dati meno complessi
  • Hai dati e operazioni che tutti i client utilizzano allo stesso modo
  • Non sono richiesti requisiti per le query di dati complessi

 

È anche possibile creare una singola applicazione con API GraphQL e REST API per diverse aree di funzionalità.

Come utilizzare sia GraphQL che REST sulla stessa API

L'aggiornamento di un'API RESTful a un'API GraphQL è possibile senza eseguire una riscrittura completa.

Ecco una descrizione del processo:

  1. Comprendi il modello di dati dell'API RESTful. Per fare ciò, esamina la forma dei dati in ogni risorsa URL.
  2. Scrivi lo schema GraphQL dal modello di dati.
  3. Determina quali operazioni eseguono i client sui dati e includile nello schema.
  4. Crea una funzione di risoluzione nel codice lato server per ogni campo dello schema.
  5. Crea un server GraphQL con i risolutori e lo schema.

Dopodiché, i client potranno comunicare con la tua API utilizzando GraphQL o REST.

Leggi come creare resolver GraphQL »

Riepilogo delle differenze tra REST e GraphQL

 

REST

GraphQL

In cosa consiste?

REST è un insieme di regole che definisce lo scambio di dati strutturati tra un client e un server.

GraphQL è un linguaggio di query, uno stile di architettura e un set di strumenti per creare e manipolare le API.

Ideale per

REST è utile per origini dati semplici in cui le risorse sono ben definite.

GraphQL è utile per origini dati di grosse dimensioni, complesse e interconnesse.

Accesso ai dati

REST ha più endpoint sotto forma di URL per definire le risorse.

GraphQL ha un unico endpoint URL.

Dati restituiti

REST restituisce i dati in una struttura fissa definita dal server.

GraphQL restituisce i dati in una struttura flessibile definita dal client.

Come sono strutturati e definiti i dati

I dati REST sono debolmente tipizzati. Quindi il client deve decidere come interpretare i dati formattati quando vengono restituiti.

I dati GraphQL sono fortemente tipizzati. Quindi il client riceve i dati in formati predeterminati e reciprocamente compresi.

Controllo degli errori

Con REST, il client deve verificare se i dati restituiti sono validi.

Con GraphQL, le richieste non valide vengono in genere rifiutate dalla struttura dello schema. Ciò si traduce in un messaggio di errore generato automaticamente.

In che modo AWS può supportare i tuoi requisiti GraphQL e REST?

Amazon Web Services (AWS) ti aiuta a creare e servire meglio le API gestite.

AWS AppSync crea API GraphQL e publish-subscribe (pub/sub) serverless. Semplificano lo sviluppo delle applicazioni attraverso un unico endpoint per interrogare, aggiornare o pubblicare dati in modo sicuro.

Con AWS AppSync, crei API che consentono ai client di fare quanto segue:

  • Interagire con più origini dei dati (SQL, NoSQL, dati di ricerca, endpoint REST e microservizi) con un'unica chiamata di rete
  • Sincronizzare automaticamente i dati tra applicazioni per dispositivi mobili e Web e il cloud
  • Trasmettere dati dal backend a e tra i client connessi
  • Accedere ai dati dell'Internet delle cose (IoT) per creare pannelli di controllo in tempo reale in un'applicazione per dispositivi mobile o Web

Allo stesso modo, Gateway Amazon API è un servizio completamente gestito che semplifica la creazione, la pubblicazione, la manutenzione, il monitoraggio e la protezione delle API su qualsiasi scala.

Ecco alcuni vantaggi che si possono ottenere utilizzando Gateway API:

  • Fornire agli utenti prestazioni ad alta velocità sia per le richieste che per le risposte API
  • Autorizzare l'accesso alle tue API
  • Eseguire simultaneamente più versioni della stessa API per iterare, testare e rilasciare rapidamente nuove versioni
  • Monitorare i parametri delle prestazioni e le informazioni su chiamate API, latenza dei dati e frequenza di errore

Inizia a usare GraphQL e REST su AWS creando un account oggi stesso.

Fasi successive con AWS

Inizia a creare con GraphQL

Scopri come iniziare a utilizzare GraphQL su AWS

Ulteriori informazioni 
Inizia a creare con REST

Scopri come iniziare a utilizzare REST su AWS

Ulteriori informazioni