Accedi / Registrati Account

API

Cos'è GraphQL?

GraphQL è un linguaggio di interrogazione lato server per interfacce di programmazione delle applicazioni (API), in grado di fornire ai client unicamente i dati di cui hanno bisogno. 

Progettato per rendere le API rapide, flessibili e intuitive per gli sviluppatori, può anche essere implementato nell'ambiente di sviluppo integrato (IDE) noto come GraphiQL. Nato come alternativa a REST, GraphQL consente agli sviluppatori di ottenere richieste contenenti dati provenienti da più sorgenti, in una singola chiamata API. 

Inoltre, GraphQL offre ai gestori delle API la possibilità di aggiungere o disattivare campi senza influenzare le query esistenti. Gli sviluppatori possono utilizzare qualsiasi metodo per realizzare le API, e la specifica di GraphQL a garantisce che funzionino in modo prevedibile verso i client.

Schemi, resolver e altri termini comuni di GraphQL

Gli sviluppatori di API usano GraphQL per creare uno schema in grado di descrivere tutti i possibili dati su cui i client potrebbero eseguire query tramite il servizio specificato. 

Uno schema GraphQL è composto da tipi di oggetto che definiscono la tipologia di oggetti che è possibile richiedere e i tipi di campi disponibili al suo interno. 

Mano a mano che le query vengono ricevute, GraphQL le convalida a fronte dello schema.Dopo averle convalidate, le query vengono eseguite.

Lo sviluppatore dell'API aggiunge i campi dello schema a una funzione chiamata resolver. Durante l'esecuzione, il resolver genera il valore.

immagine

Oltre a definire e convalidare la sintassi delle query dell'API (indicata nel repository graphql-spec), GraphQL offre notevole flessibilità al progettatore dell'API. GraphQL non fornisce alcuna indicazione su come memorizzare i dati o quale linguaggio di programmazione usare. Gli sviluppatori possono pertanto utilizzare PHP (graphql-php), Scala (Sangria), Python (Graphene Python), Ruby (graphql-ruby), JavaScript (graphql.js) e molti altri. Non propone requisiti relativi a rete, autorizzazioni o impaginazione.

Dal punto di vista del client, GraphQL si occupa principalmente di query e mutazioni. Se analizzassimo tali operazioni in base al modello CRUD (create, read, update e delete), una query equivarrebbe a read. Gli altri elementi (create, update e delete) vengono gestiti dalle mutazioni.

Vantaggi e svantaggi di GraphQL per gli ambienti enterprise

Se si sta valutando l'adozione di GraphQL in un ambiente aziendale o di livello enterprise, occorre tenere conto dei pro e contro.

Vantaggi

  • Uno schema GraphQL prevede un'unica sorgente di dati in un'applicazione GraphQL. Offre alle organizzazioni la possibilità di eseguire la federazione di tutte le API.
  • Le chiamate di GraphQL vengono gestite in un unico percorso di andata/ritorno. I client ricevono solo i dati che hanno richiesto.
  • Tipi di dati fortemente definiti riducono gli errori di comunicazione tra il client e il server. 
  • GraphQL dispone di funzionalità di introspezione. Un client può richiedere un elenco di tipi di dati disponibili, agevolando la generazione automatica della documentazione.
  • GraphQL consente all'API di un'applicazione di evolversi senza interrompere le query esistenti.
  • Molte estensioni open source di GraphQL offrono funzionalità non disponibili con le API REST.
  • GraphQL non richiede un'architettura applicativa specifica. Può essere introdotto su un'API REST esistente e può lavorare con gli strumenti di gestione delle API.

Svantaggi

  • Per gli sviluppatori che sono abituati a interagire con le API REST, GraphQL implica un graduale percorso di apprendimento.
  • Spostando molto dell'attività di una query sul lato server, GraphQL rende più onerosi i compiti degli sviluppatori server.
  • A seconda del tipo di implementazione, GraphQL potrebbe richiedere diverse strategie di gestione delle API rispetto alle API REST, in particolare se si considerano i limiti di tariffe e prezzi.
  • Il caching è molto più complesso rispetto a REST.
  • I gestori delle API devono anche scrivere schemi GraphQL di facile manutenzione.

Esempio di query GraphQL

Il modo migliore per capire GraphQL è analizzare da vicino alcune query e risposte. Di seguito prendiamo in esame 3 esempi adattati dal sito web del progetto GraphQL, graphql.org.

Il primo esempio mostra in che modo un client può costruire una query GraphQL, chiedendo a un'API di restituire campi specifici in una determinata forma.

{ me { name } }

Un'API GraphQL restituirebbe un risultato come questo in formato JSON:

{ "me": { "name": "Dorothy" } }

Un client può inoltre passare argomenti come parte di una query GraphQL, come in questo esempio:

{ human(id: "1000") { name location } }

Il risultato?

{ "data": { "human": { "name": "Dorothy, "location": "Kansas" } } }

Da questo passaggio in poi GraphQL offre all'utente più flessibilità, lasciando che definisca i frammenti riutilizzabili e assegni le variabili a proprio piacimento.

Ipotizziamo di dover richiedere un elenco di ID e, successivamente, una serie di record per ogni ID. GraphQL ti consente di costruire una query in grado di estrarre qualsiasi elemento di cui hai bisogno tramite una sola chiamata API. 

Quindi la query:

query HeroComparison($first: Int = 3) { leftComparison: hero(location: KANSAS) { ...comparisonFields } rightComparison: hero(location: OZ) { ...comparisonFields } } fragment comparisonFields on Character { name friendsConnection(first: $first) { totalCount edges { node { name } } } }


Potrebbe produrre questo risultato:

{ "data": { "leftComparison": { "name": "Dorothy", "friendsConnection": { "totalCount": 4, "edges": [ { "node": { "name": "Aunt Em" } }, { "node": { "name": "Uncle Henry" } }, { "node": { "name": "Toto" } } ] } }, "rightComparison": { "name": "Wizard", "friendsConnection": { "totalCount": 3, "edges": [ { "node": { "name": "Scarecrow" } }, { "node": { "name": "Tin Man" } }, { "node": { "name": "Lion" } } ] } } } } 

Se utilizzi GitHub, potrai velocemente acquisire dimestichezza con GraphQL attraverso esperienze pratiche tramite GraphQL Explorer di GitHub.

GraphQL e l'open source

GraphQL è stato sviluppato da Facebook, che ha iniziato a utilizzarlo per le applicazioni mobile nel 2012. La specifica di GraphQL è diventata open source nel 2015. È ora supervisionato dalla GraphQL Foundation.

Molti sono i progetti open source che utilizzano GraphQL. L'elenco sottostante non si intende esaustivo, ma include progetti ideati per semplificare l'adozione di GraphQL.

  • Apollo, una piattaforma GraphQL che comprende una libreria client frontend (Apollo Client) e un framework del server backend (Apollo Server).
  • Offix, un client offline che consente alle mutazioni e alle query GraphQL di essere eseguite anche quando un'applicazione non ha connessione.
  • Graphback, un client a riga di comando per la generazione di server Node.js abilitati per GraphQL.
  • OpenAPI-to-GraphQL, un'interfaccia a riga di comando e una libreria per rendere in linguaggio GraphQL le API descritte da OpenAPI Specifications o Swagger.

Esplora i prodotti per la gestione delle API di Red Hat

Red Hat 3scale API Management

Piattaforma per la gestione delle API.

Red Hat Fuse logo

Piattaforma di integrazione distribuita.