Guida per principianti alle interfacce e alle unioni di GraphQL

Cos’è GraphQL?

GraphQL è un linguaggio di interrogazione open source per le API, sviluppato inizialmente da Facebook nel 2012 e rilasciato al pubblico nel 2015. Offre un’alternativa flessibile ed efficiente alle tradizionali API REST, consentendo ai client di richiedere solo i dati specifici di cui hanno bisogno, risolvendo problemi di sovra-recupero e sotto-recupero che spesso si verificano con le API REST.

Uno dei motivi della crescente popolarità di GraphQL è la sua natura orientata al client. Questo lo rende particolarmente adatto per le applicazioni moderne in cui le prestazioni, la scalabilità e le esperienze utente senza soluzione di continuità sono fondamentali. GraphQL consente ai client di combinare più risorse in una singola richiesta, riducendo il traffico di rete e rendendolo un’eccellente soluzione per le app mobili con larghezza di banda limitata o esigenze complesse lato front-end.

Aziende importanti come GitHub, Twitter, Indeed e Shopify hanno abbracciato GraphQL, evidenziando il suo potenziale nel semplificare lo sviluppo delle API e migliorare le interazioni tra client e server.

Interfaccia GraphQL

In GraphQL, un’ Interfaccia funziona in modo simile alle interfacce nella programmazione orientata agli oggetti. È un tipo astratto che definisce un insieme di campi comuni che possono implementare più tipi di oggetti. Ciò garantisce che il client possa interrogare con fiducia questi campi comuni attraverso tipi diversi.

Markdown

 

Interrogazione del client GraphQL:

Markdown

 

In questo esempio, i campi comuni come id, name e model sono disponibili in tutti i tipi di oggetti che implementano l’interfaccia Vehicle. Tuttavia, i campi specifici del tipo come fuelType per Car e gearCount e isElectric per Bicycle possono essere interrogati utilizzando frammenti.

Se il client ha bisogno solo dei campi comuni, può omettere i frammenti:

Markdown

 

Vantaggi dell’Utilizzo delle Interfacce

  1. Riuso del Codice: I campi comuni possono essere definiti nell’interfaccia e condivisi tra più tipi, riducendo la ridondanza.
  2. Logica Semplificata sul Lato Client: I client non hanno bisogno di controlli condizionali per i tipi di oggetti. Possono richiedere tipi esatti e gestire le risposte con sicurezza.
  3. Estendibilità dello Schema: Aggiungere un nuovo campo comune diventa più facile poiché deve essere definito solo nell’interfaccia.
  4. Struttura Impegnativa: Le interfacce impongono una struttura condivisa tra tutti i tipi implementativi, garantendo coerenza (ad esempio, tutti i veicoli devono avere un id, name e model).
  5. Interrogazione Unificata: Invece di interrogare tipi diversi singolarmente, i client possono interrogare un’unica interfaccia per recuperare dati da tutti i tipi implementativi.
  6. Documentazione Migliorata: Definendo comportamenti comuni tramite interfacce, diventa più facile per i consumatori di API capire e lavorare con tipi correlati.

Unione GraphQL

Un’Unione in GraphQL è un tipo astratto che consente ai client di interrogare più tipi di oggetti che sono correlati in qualche modo attraverso un singolo campo. A differenza delle interfacce, le unioni non richiedono che i tipi membri condividano campi comuni. Ciò rende le unioni ideali per gestire casi in cui i tipi correlati hanno strutture diverse ma devono essere interrogati insieme.

Markdown

 

Query del client GraphQL:

Markdown

 

In questo esempio, Prodotto, Servizio e Abbonamento sono tutti tipi distinti che appartengono all’unione PurchaseItem. Il client può interrogare tutti e tre i tipi utilizzando frammenti in una singola query, anche se non condividono alcun campo.

Nota importante sulle unioni, i tipi membri di un tipo di Unione devono tutti essere tipi di base oggetto; i tipi Scala, Interfaccia e Unione non devono essere tipi membri di un’Unione. Allo stesso modo, i tipi di wrapping non devono essere tipi membri di un’Unione.

Vantaggi dell’Utilizzo delle Unioni

  • Raggruppamento Flessibile: Le unioni consentono di interrogare tipi correlati che non condividono campi comuni, il che sarebbe difficile da gestire altrimenti.
  • Gestione Semplificata degli Errori: I client possono utilizzare frammenti per interrogare tipi specifici, riducendo la necessità di logica condizionale complessa sul lato del client.
  • Gestione Dati Eterogenei: Una singola query può recuperare dati da tipi multipli, semplificando la gestione di strutture dati varie.
  • Utile per le risposte agli errori: I unioni sono particolarmente utili quando si desidera combinare le risposte di successo e i dettagli degli errori in un unico tipo di risposta, consentendo ai client di gestirli in modo efficiente.

In sintesi

Le interfacce e le unioni di GraphQL offrono modi potenti per strutturare lo schema GraphQL, consentendo flessibilità e semplificando le interazioni client-server. Le interfacce consentono campi condivisi tra i tipi, promuovendo la riutilizzabilità del codice e facilitando le estensioni dello schema. Le unioni, d’altra parte, offrono un modo per interrogare tipi disparati insieme senza richiedere campi comuni.

Source:
https://dzone.com/articles/a-beginners-guide-to-graphql-interfaces-and-unions