Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Confronto REST e GraphQL
APIs(Application Programming Interfaces) svolgono un ruolo cruciale nel facilitare lo scambio di dati tra le applicazioni. Come affermato in precedenza, APIs sono emersi due approcci importanti per la progettazione: GraphQL e. REST Sebbene entrambi abbiano lo scopo fondamentale di abilitare la comunicazione client-server, differiscono in modo significativo nella loro implementazione e nei casi d'uso.
GraphQL e GraphQL REST condividono diverse caratteristiche chiave:
-
Modello client-server: entrambi utilizzano un'architettura client-server per lo scambio di dati.
-
Apolidia: nessuno dei due conserva le informazioni sulla sessione del client tra una richiesta e l'altra.
-
HTTPBasato: entrambi vengono generalmente utilizzati HTTP come protocollo di comunicazione sottostante.
-
Progettazione orientata alle risorse: entrambi progettano lo scambio di dati attorno alle risorse, che si riferiscono a qualsiasi dato o oggetto a cui il client può accedere e manipolare tramite. API
-
Flessibilità del formato dei dati: JSON è il formato di scambio dati più comunemente utilizzato in entrambi, sebbene siano supportati anche altri formati simili. XML HTML
-
Indipendenti dal linguaggio e dal database: entrambi possono funzionare con qualsiasi linguaggio di programmazione o struttura di database, il che li rende altamente interoperabili.
-
Supporto per la memorizzazione nella cache: entrambi supportano la memorizzazione nella cache, consentendo a client e server di archiviare i dati a cui si accede di frequente per migliorare le prestazioni.
Pur condividendo alcuni principi fondamentali, GraphQL e GraphQL REST differiscono in modo significativo nel loro approccio alla API progettazione e al recupero dei dati:
-
Struttura delle richieste e recupero dei dati
RESTutilizza diversi HTTP metodi (GET,POST,PUT,DELETE) per eseguire operazioni sulle risorse. Ciò richiede spesso più endpoint per risorse diverse, il che può portare a inefficienze nel recupero dei dati. Ad esempio, l'esecuzione di un'GEToperazione per recuperare i dati di un utente può portare a un recupero eccessivo o insufficiente dei dati. Per ottenere i dati corretti, è possibile eseguire operazioni di troncamento o più operazioni.
GraphQL utilizza un unico endpoint per tutte le operazioni. Si basa su interrogazioni per il recupero dei dati e su mutazioni per la modifica dei dati. I client possono utilizzare le query per recuperare esattamente i dati di cui hanno bisogno in un'unica richiesta, il che riduce il sovraccarico della rete riducendo al minimo il trasferimento dei dati.
-
Schema lato server
RESTnon richiede uno schema lato server, sebbene uno possa essere definito opzionalmente per una progettazione e una documentazione efficienti. API
GraphQL utilizza uno schema lato server fortemente tipizzato per definire dati e servizi dati. Lo schema, scritto in GraphQL Schema Definition Language (SDL), include tipi di oggetti e campi per ogni oggetto e funzioni resolver lato server che definiscono le operazioni per ogni campo.
-
Funzione Versioni multiple
RESTspesso include il controllo delle versioni inURL, che può portare al mantenimento di più versioni contemporaneamente. API Il controllo delle versioni non è obbligatorio, ma può aiutare a prevenire modifiche irreversibili.
GraphQL promuove un'evoluzione continua del controllo API senza versioni esplicite richiedendo la compatibilità con le versioni precedenti. I campi eliminati restituiscono messaggi di errore, mentre i tag di deprecazione eliminano gradualmente i vecchi campi e restituiscono messaggi di avviso.
-
Gestione degli errori
RESTè digitato in modo debole e richiede che la gestione degli errori sia integrata nel codice circostante. Ciò potrebbe non identificare automaticamente gli errori relativi al tipo (ad esempio, l'analisi di un numero come testo).
Al contrario, GraphQL è fortemente tipizzato e richiede una definizione dello schema completa. Ciò consente al servizio di identificare automaticamente molti errori di richiesta con un elevato livello di dettaglio.
-
Casi d'uso
RESTè più adatto per:
-
Applicazioni più piccole con requisiti di dati meno complessi.
-
Scenari in cui i dati e le operazioni vengono utilizzati in modo simile da tutti i client.
-
Applicazioni senza esigenze complesse di interrogazione dei dati.
GraphQL è più adatto per:
-
Scenari con larghezza di banda limitata, in cui ridurre al minimo le richieste e le risposte è fondamentale.
-
Applicazioni con più fonti di dati che devono essere combinate su un unico endpoint.
-
Casi in cui le richieste dei clienti variano in modo significativo e prevedono strutture di risposta diverse.
Nota che è possibile utilizzare sia GraphQL che REST APIs all'interno di una singola applicazione per diverse aree di funzionalità. Inoltre, puoi aggiornare un file RESTful API per includere le funzionalità GraphQL senza una riscrittura completa. Per un esempio, vedi Come creare resolver GraphQL per sorgenti di AWS dati
. -