Tutorial GraphQL per principianti: cos'è, caratteristiche ed esempio

Cos'è GraphQL?

GraphQL è una tecnologia lato server del livello applicativo sviluppata da Facebook per l'esecuzione di query con dati esistenti. GraphQL può ottimizzare le chiamate API RESTful. Fornisce un modo dichiarativo per recuperare e aggiornare i dati. GraphQL ti aiuta a caricare i dati dal server al client. Consente ai programmatori di scegliere i tipi di richieste che desiderano effettuare.

Perché utilizzare GraphQL?

Di seguito sono riportati i motivi per cui utilizzare GraphQL:

  • Fornisce una query leggibile dall'uomo.
  • In GraphQL è molto semplice gestire molti database.
  • È adatto per microservizi e sistemi complessi.
  • Puoi recuperare i dati con una singola chiamata API.
  • Ti aiuta con l'invio in batch e la memorizzazione nella cache delle query.
  • Non devi affrontare problemi di recupero, sopra e sotto.
  • Personalizzare le richieste in base alle vostre esigenze.
  • Ti aiuta a scoprire lo schema nel formato appropriato.
  • GraphQL mantiene automaticamente la documentazione sincronizzata con le modifiche dell'API.
  • L'evoluzione dell'API è possibile senza controllo delle versioni.
  • I campi GraphQL vengono utilizzati in più query che possono essere condivise a un livello di componente superiore per il riutilizzo.
  • Puoi scegliere quali funzioni esporre e come funzionano.
  • Può essere utilizzato per la prototipazione rapida di applicazioni.

Applicazioni di GraphQL

Ecco le importanti applicazioni di GraphQL:

  • Fornisce Relay e altri framework client
  • GraphQL ti aiuta a migliorare le prestazioni dell'app mobile.
  • Può ridurre il problema del recupero eccessivo riducendo il servizio cloud lato server e riducendo l'utilizzo della rete lato client.
  • Può essere utilizzato quando l'applicazione client deve specificare quali campi sono necessari nel formato di query lungo.
  • GraphQL può essere pienamente utilizzato quando devi aggiungere funzionalità alla tua API vecchia o esistente.
  • Viene utilizzato quando è necessario semplificare API complesse.
  • Mescola e mescola il modello della facciata, comunemente usato nella programmazione orientata agli oggetti.
  • Quando devi aggregare dati da più di un luogo in un'unica comoda API.
  • Puoi utilizzare GraphQL come astrazione su un'API esistente per specificare la struttura della risposta in base alle esigenze dell'utente.

Cosa devi imparare prima di imparare GraphQl?

Questo tutorial GraphQL è basato su Express e NodeJs. Pertanto, puoi imparare GraphQL molto facilmente con una conoscenza di base di NodeJS.

Componenti chiave di GraphQL

Ora in questo tutorial di GraphQL, impariamo i componenti chiave di GraphQL:

Componenti chiave di GraphQL
Componenti chiave di GraphQL

Come mostrato nella figura sopra, ci sono tre componenti chiave di GraphQL: 1) Query, 2) Resolver e 3) Schema.

domanda

La query è una richiesta API effettuata dall'applicazione della macchina client. Supporta aumenti e punta ad array. La query viene utilizzata per leggere o recuperare valori.

Parti della query:

Di seguito sono riportate le parti importanti della query

  1. Settore:

Un campo indica semplicemente che stiamo chiedendo al server informazioni particolari. Di seguito è riportato un esempio GraphQL di un campo in una query graphQL.

query {
    team {
        id name
    }
}

"data": {
    "team":[ {
        "id": 1, 
        "name": "Avengers"
    }
    ,
    …
]
}
}

Nell'esempio GraphQL sopra, chiediamo al server il campo chiamato team e i suoi sottocampi come id e nome. Il server GraphQL restituisce i dati che abbiamo richiesto.

  1. argomenti

In REST, possiamo passare solo un singolo set di argomenti come segmenti URL e parametri di query. Per ottenere un profilo particolare, una tipica chiamata REST sarà simile alla seguente:

GET /api'team?id=2 Content-Type: application JSON
 {
    "id": 2, 
    "name": "Justice League."
}

risolvere

I risolutori forniscono le indicazioni per convertire le operazioni GraphQL in dati. Risolvono la query sui dati definendo funzioni di risoluzione.

Visualizza al server il processo e la posizione per recuperare i dati in base a un campo specifico. Il risolutore separa anche lo schema del database e lo schema API. Le informazioni separate aiutano a modificare il contenuto ottenuto dal database.

Schema

Uno schema GraphQL è il centro dell'implementazione di GraphQL. Descrive le funzionalità disponibili per i client che si connettono ad esso.

Caratteristiche di GraphQL

Ecco le caratteristiche importanti di GraphQL:

  • Fornisce un linguaggio di query dichiarativo, che non è imperativo.
  • È gerarchico e incentrato sul prodotto.
  • GraphQL è fortemente tipizzato. Significa che le query vengono eseguite nel contesto di un particolare sistema.
  • Le query in GraphQL sono codificate nel client, non nel server.
  • Ha tutte le funzionalità del livello applicativo del modello OSI.

Client GraphQL

Il client GraphQL è un codice che effettua richieste POST a un server GraphQL pertinente. Puoi eseguire query direttamente su un'API GraphQL, ma l'approccio ottimale è sfruttare una libreria client dedicata utilizzando Relay.

Questo JavaLa libreria di script è sviluppata da Facebook per realizzare applicazioni React con GraphQL. I client GraphQL possono essere un CMS come Drupal, un'applicazione a pagina singola, un'applicazione mobile, ecc.

Server GraphQL

I server GraphQL sono un'implementazione lato server delle specifiche di GraphQL. Rappresenta i tuoi dati come API GraphQL, per la quale il tuo programma client può eseguire query banca dati.

Gateway GraphQL

Gateway è un modello di microservizio in cui è possibile creare un servizio separato per far fronte ad altri servizi backend. Offre documentazione praticabile e fornisce un modo conveniente per raccogliere dati da più di una fonte con un'unica richiesta.

Qual è la variabile in GraphQL?

A Variabile in GraphQL viene utilizzato per separare i valori dinamici dalla query del client e passare la query come dizionario univoco. La variabile in GraphQL può essere utilizzata anche per riutilizzare la query o le mutazioni scritte dal client con argomenti individuali. In graphQL, non è possibile passare argomenti dinamici direttamente nella stringa di query. Il motivo è che il codice lato client deve manipolare dinamicamente la stringa di query nel momento in cui si esegue il programma.

GraphQL ha un buon modo per fattorizzare i valori dinamici fuori dalla query. Li passa come un dizionario separato. Questi valori sono noti come variabili. Ogni volta che lavoriamo con le variabili, dobbiamo fare le seguenti tre cose:

  1. Sostituisci il valore statico nella query con un nome di variabile.
  2. Dichiara il nome della variabile come una delle variabili accettate dalla query GraphQL.
  3. Passa il valore nel dizionario delle variabili specifico del trasporto.

Ecco come appare tutto insieme:

query HeroNameAndFriends($episode: Episode) {
  hero(episode: $episode) {
    name
    friends {
      name
    }
  }
}
{
  "episode": "JEDI"
}
{
  "data": {
    "hero": {
      "name": "R2-D2",
      "friends": [
        {
          "name": "Luke Skywalker"
        },
        {
          "name": "Han Solo"
        },
        {
          "name": "Leia Organa"
        }
      ]
    }
  }
}

Come puoi vedere nell'esempio GraphQL sopra, abbiamo semplicemente passato una variabile diversa oltre alla necessità di costruire una nuova query.

Cos'è la mutazione?

Una mutazione è un modo per modificare il set di dati in GraphQL. Modifica i dati nell'archivio dati e restituisce un valore. Le mutazioni ti aiutano a inserire, aggiornare o eliminare dati. Generalmente, le mutazioni sono definite come una parte dello schema.

Punti da considerare durante la progettazione delle mutazioni GraphQL

Ecco i punti importanti durante la progettazione di GraphQL:

  • Denominazione: Prima di tutto, devi nominare il verbo della tua mutazione. Poi il sostantivo, o “oggetto” se applicabile. Usa camelCase mentre dai un nome alle mutazioni.
  • Specificità: Devi renderlo il più specifico possibile per la mutazione. Le mutazioni dovrebbero rappresentare azioni semantiche intraprese dall'utente.
  • Oggetto di input: Utilizzare un tipo di oggetto di input univoco e obbligatorio come argomento per eseguire la mutazione sul client.
  • Tipo di carico utile unico: Dovresti utilizzare un tipo di carico utile univoco per ogni mutazione. Puoi anche aggiungere l'output della mutazione come campo a quel particolare tipo di payload.
  • Nidificazione: Usa l'annidamento per la tua mutazione ovunque abbia senso. Ti consente di utilizzare appieno l'API GraphQL.

Differenza tra GraphQL e REST

La tabella seguente mostra le differenze importanti tra GraphQL e RESTO.

GraphQL REST
Segue un'architettura orientata al cliente. Segue un'architettura basata sul server.
GraphQL può essere organizzato in termini di uno schema. REST può essere organizzato in termini di endpoint.
GraphQL è una comunità in crescita. REST è una comunità molto grande.
La velocità di sviluppo in GraphQL è elevata. La velocità di sviluppo in REST è lenta.
La curva di apprendimento in GraphQL è difficile. La curva di apprendimento in REST è moderata.
L'identità è separata dal modo in cui la recuperi. L'endpoint che chiami in REST è l'identità di un particolare oggetto.
In GraphQL, il server determina le risorse disponibili. La forma e la dimensione della risorsa sono determinate dal server in REST.
GraphQL fornisce un'elevata coerenza su tutte le piattaforme. È difficile ottenere coerenza su tutte le piattaforme.

Svantaggi di GraphQL

Ecco gli svantaggi di GraphQL:

  • Ecosistema giovane
  • Mancanza di risorse nella parte backend.
  • Manca un modello di progettazione per un'app complessa.
  • Problemi di prestazioni con query complesse.
  • Eccessivo per piccole applicazioni
  • GraphQL non dipende dai metodi di memorizzazione nella cache HTTP che consentono di archiviare il contenuto della richiesta.
  • GraphQL non riconosce i file. Pertanto, non è inclusa una funzionalità di caricamento dei file.
  • Con GraphQL, preparati a ricevere molta formazione pre-sviluppo, come l'apprendimento dello Schema Definition Language.

App e strumenti open source utilizzati da GraphQL

Le app e gli strumenti open source importanti utilizzati da GraphQL sono i seguenti:

  • Gatsby: Gastby è un'applicazione basata su GraphQL che può utilizzare dati derivati ​​da più di una fonte API GraphQL. Puoi usarlo per sviluppare un'applicazione React statica e basata su client.
  • GraphiQL: È un ID che si integra con il browser e interagisce anche con l'API di GraphQL. Alcune delle funzioni incluse in GraphiQL sono mutazioni, query sui dati e query con completamento automatico.
  • Parco giochi GraphQL: È un potente IDE che dispone di un editor integrato per la gestione di mutazioni, convalida, query GraphQl, abbonamenti, ecc. Lo sviluppatore può utilizzare questo IDE per visualizzare la struttura dello schema.
  • Prisma: Prisma è un livello di astrazione del database che trasforma i tuoi database in API GraphQL con operazioni CRUD (Crea, Leggi, Aggiorna ed Elimina).
  • Po: È uno strumento e una piattaforma open source che converte il codice riutilizzabile in componenti. Gli sviluppatori possono usarli per condividere e sviluppare vari progetti.

Sintesi

  • GraphQL è una tecnologia lato server a livello di applicazione sviluppata da Facebook per l'esecuzione di query con dati esistenti.
  • Puoi utilizzare GraphQL per recuperare i dati con una singola chiamata API.
  • GraphQL ti aiuta a migliorare le prestazioni dell'app mobile.
  • Componenti importanti della query GraphQL sono: 1) Query, 2) Resolver, 3) Schema.
  • GraphQL è fortemente tipizzato. Significa che le query vengono eseguite nel contesto di un particolare sistema.
  • Il client GraphQL è un codice che effettua richieste POST a un server GraphQL pertinente.
  • I server GraphQL sono un'implementazione lato server delle specifiche di GraphQL.
  • Gateway è un modello di microservizio in cui è possibile creare un servizio separato per far fronte ad altri servizi backend.
  • GraphQL ha un buon modo per fattorizzare i valori dinamici fuori dalla query.
  • Una mutazione è un modo per modificare il set di dati in GraphQL.
  • I punti importanti durante la progettazione di GraphQL sono: 1) Denominazione, 2) Specificità, 3) Oggetto di input Tipo di carico utile unico e 4) Annidamento.
  • GraphQL può essere organizzato in termini di schema, mentre REST può essere organizzato in termini di endpoint.
  • Lo svantaggio di GraphQL è che manca di risorse nella parte backend.