GraphQL vs REST: le vere differenze

GraphQL vs REST

GraphQL vs REST: gli stessi dati recuperati nei due modi | We.Inc

Confronta GraphQL e REST con gli stessi dati recuperati nei due modi: numero di richieste, over-fetching, caching, come tornano gli errori e una tabella per scegliere.

REST espone molti URL, uno per risorsa, e il server decide cosa contiene ogni risposta. GraphQL espone un unico endpoint, di solito /graphql, a cui il client invia una query che indica esattamente i campi che vuole. REST ottiene gratis il caching HTTP per URL; GraphQL risparmia round trip ed elimina i campi inutilizzati, al prezzo di più lavoro sul server.

In sintesi

Il confronto qui sotto recupera la stessa schermata di dati nei due modi. Scegli uno scenario per vedere le chiamate REST che un client farebbe accanto all'unica query GraphQL che le sostituisce, e cosa ogni risposta omette o aggiunge.

Domande frequenti

GraphQL è più veloce di REST?

Non di per sé. Può ridurre i round trip e la dimensione del payload per le schermate che richiedono dati correlati, ma ogni query può costare di più al server per essere risolta. Un endpoint REST ben progettato per una singola schermata può essere altrettanto rapido.

Perché un errore GraphQL torna con stato 200?

Un campo può fallire mentre altri riescono, quindi il server restituisce i dati che ha più un array errors. Le linee guida GraphQL over HTTP usano 2xx per il successo parziale; i server che rispondono con application/graphql-response+json usano 400 quando una richiesta non supera la validazione.

Le risposte GraphQL si possono mettere in cache su una CDN?

Sì, se le query vengono inviate con GET, cosa che i server possono consentire solo per le query. Le query lunghe possono superare i limiti degli URL, quindi i team usano le persisted query che inviano un breve hash invece dell'intero documento.

Posso usarli entrambi in un unico prodotto?

Molti team lo fanno. Upload di file, webhook e semplici risorse pubbliche restano spesso route REST, mentre le schermate dell'app leggono tramite uno strato GraphQL che può chiamare sotto quegli stessi servizi.

GraphQL ha bisogno di un database proprio?

No. Un server GraphQL è uno strato di resolver, piccole funzioni che recuperano ogni campo da dove si trovano i dati: un database, un servizio REST o un file. Lo schema descrive forme, non lo storage.

Over-fetching e under-fetching

Il caching funziona in modo diverso

Errori e codici di stato

Quale scegliere

Tabella decisionale

Cosa passa sulla rete

Una richiesta GraphQL con fetch

Ogni operazione è una POST di JSON con le chiavi query e variables verso l'unico endpoint. L'header Accept chiede il tipo di risposta GraphQL più recente, con il JSON semplice come fallback.

Una risposta GraphQL parziale

Un campo è fallito, quindi è null e la voce in errors lo indica con path. Il resto dei dati è comunque arrivato.

Profilo con post

REST richiede una seconda chiamata per i post, ed entrambe le risposte includono ogni campo previsto dal server. La query GraphQL restituisce solo il nome, l'avatar e tre titoli di post.

Solo i nomi

Per un semplice elenco la chiamata REST è comunque una sola richiesta, ma invia i record utente completi. GraphQL invia solo i due campi richiesti.

Post con commenti e autori

Senza un endpoint personalizzato, REST percorre l'albero un livello per richiesta, e recuperare l'autore di ogni commento può significare una chiamata in più per commento. GraphQL annida l'intero albero in una sola query.

Creare un post

Le scritture si somigliano: una richiesta ciascuna. REST usa il metodo POST su un URL di collezione; GraphQL invia una mutation, sempre come HTTP POST, e sceglie quali campi del nuovo post restituire.

Gli stessi dati, nei due modi

Scegli uno scenario

Richieste REST

Query GraphQL

Copia le richieste REST

Copia la query GraphQL

REST: {n} richiesta/e. GraphQL: {v} richiesta.

Inizia gratis · Nessuna carta di credito richiesta

Correlati: Guide

Prodotto

Per chi è

Funzionalità

Risorse

Azienda

Mappa del sito