View a markdown version of this page

Perché usare GraphQL rispetto a REST? - AWS AppSync GraphQL

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à.

Perché usare GraphQL rispetto a REST?

REST è uno degli stili architettonici fondamentali delle API web. Tuttavia, man mano che il mondo diventa più interconnesso, la necessità di sviluppare applicazioni robuste e scalabili diventerà un problema sempre più urgente. Sebbene REST venga spesso utilizzato per creare API Web, sono stati identificati diversi inconvenienti ricorrenti nelle implementazioni RESTful:

  1. Richieste di dati: utilizzando le API RESTful, in genere richiedi i dati necessari tramite gli endpoint. Il problema sorge quando si dispone di dati che potrebbero non essere impacchettati in modo così ordinato. I dati di cui hai bisogno possono trovarsi dietro più livelli di astrazione e l'unico modo per recuperarli è utilizzare più endpoint, il che significa effettuare più richieste per estrarre tutti i dati.

  2. Ricavamento eccessivo e scarso recupero: come se non bastasse, i dati di ogni endpoint sono rigorosamente definiti, il che significa che restituirai tutti i dati definiti per quell'API, anche se tecnicamente non li volevi.

    Ciò può comportare un recupero eccessivo, il che significa che le nostre richieste restituiscono dati superflui. Ad esempio, supponiamo che tu stia richiedendo i dati del personale aziendale e desideri conoscere i nomi dei dipendenti di un determinato reparto. L'endpoint che restituisce i dati conterrà i nomi, ma potrebbe contenere anche altri dati come la qualifica o la data di nascita. Poiché l'API è fissa, non puoi richiedere solo i nomi; il resto dei dati viene fornito con essa.

    La situazione opposta, in cui non restituiamo una quantità sufficiente di dati, si chiama under-fetching. Per ottenere tutti i dati richiesti, potrebbe essere necessario effettuare più richieste al servizio. A seconda di come sono strutturati i dati, potresti imbatterti in interrogazioni inefficienti con conseguenti problemi come il temuto problema n+1.

  3. Iterazioni di sviluppo lente: molti sviluppatori personalizzano le proprie API RESTful per adattarle al flusso delle loro applicazioni. Tuttavia, man mano che le applicazioni crescono, sia il front-end che il backend possono richiedere modifiche estese. Di conseguenza, le API potrebbero non adattarsi più alla forma dei dati in modo efficiente o di impatto. Ciò si traduce in iterazioni del prodotto più lente a causa della necessità di modifiche alle API.

  4. Prestazioni su larga scala: a causa di questi problemi di aggravamento, ci sono molte aree in cui la scalabilità ne risentirà. Le prestazioni dal lato delle applicazioni potrebbero risentirne perché le richieste restituiranno una quantità eccessiva di dati o una quantità insufficiente (con conseguente aumento delle richieste). Entrambe le situazioni causano inutili sollecitazioni sulla rete con conseguenti scarse prestazioni. Per quanto riguarda gli sviluppatori, la velocità di sviluppo potrebbe essere ridotta perché le API sono fisse e non si adattano più ai dati richiesti.

Il punto di forza di GraphQL è superare gli svantaggi del REST. Ecco alcune delle soluzioni chiave che GraphQL offre agli sviluppatori:

  1. Endpoint singoli: GraphQL utilizza un singolo endpoint per interrogare i dati. Non è necessario creare più API per adattarle alla forma dei dati. Ciò si traduce in un minor numero di richieste in rete.

  2. Recupero: GraphQL risolve i problemi ricorrenti del recupero eccessivo e insufficiente semplicemente definendo i dati necessari. GraphQL ti consente di modellare i dati in base alle tue esigenze in modo da ricevere solo ciò che hai chiesto.

  3. Astrazione: le API GraphQL contengono alcuni componenti e sistemi che descrivono i dati utilizzando uno standard indipendente dal linguaggio. In altre parole, la forma e la struttura dei dati sono standardizzate in modo che sia il front-end che il backend sappiano come verranno inviati sulla rete. Ciò consente agli sviluppatori di entrambe le parti di lavorare con i sistemi GraphQL e non con essi.

  4. Iterazioni rapide: a causa della standardizzazione dei dati, potrebbero non essere necessarie modifiche su un'estremità dello sviluppo sull'altra. Ad esempio, le modifiche alla presentazione del frontend potrebbero non comportare modifiche estese al backend perché GraphQL consente di modificare facilmente le specifiche dei dati. È possibile semplicemente definire o modificare la forma dei dati per adattarli alle esigenze dell'applicazione man mano che cresce. Ciò si traduce in un minore potenziale di sviluppo.

Questi sono solo alcuni dei vantaggi di GraphQL. Nelle prossime sezioni, imparerai come è strutturato GraphQL e le proprietà che lo rendono un'alternativa unica a REST.