GraphQL - Risolutore

Resolver è una raccolta di funzioni che generano risposta per una query GraphQL. In termini semplici, un risolutore agisce come un gestore di query GraphQL. Ogni funzione di risoluzione in uno schema GraphQL accetta quattro argomenti posizionali come indicato di seguito:

fieldName:(root, args, context, info) => { result }

Di seguito è riportato un esempio di funzioni del resolver:

//resolver function  with no parameters and returning string
greeting:() => {
   return "hello from  TutorialsPoint !!!"
}

//resolver function with no parameters and returning list
students:() => db.students.list()

//resolver function with arguments and returning object
studentById:(root,args,context,info) => {
   return db.students.get(args.id);
}

Di seguito sono riportati gli argomenti posizionali e la loro descrizione:

Sr.No. Argomenti e descrizione
1

root

L'oggetto che contiene il risultato restituito dal resolver nel campo genitore.

2

args

Un oggetto con gli argomenti passati nel campo nella query.

3

context

Questo è un oggetto condiviso da tutti i resolver in una particolare query.

4

info

Contiene informazioni sullo stato di esecuzione della query, incluso il nome del campo, il percorso del campo dalla radice.

Formato dei risultati del resolver

I resolver in GraphQL possono restituire diversi tipi di valori come indicato di seguito:

Sr.No. Argomenti e descrizione
1

null or undefined

questo indica che l'oggetto non è stato trovato

2

array

questo è valido solo se lo schema indica che il risultato di un campo dovrebbe essere un elenco

3

promise

i risolutori spesso eseguono azioni asincrone come il recupero da un database o un'API di backend, in modo che possano restituire promesse

4

scalar or object

un risolutore può anche restituire altri valori

Illustrazione

Creiamo una semplice applicazione per comprendere il resolver. Questo creerà uno schema per interrogare uno studente per id dal server. I dati degli studenti verranno archiviati in un file flat e utilizzeremo un modulo nodo chiamatonotarealdb per falsificare un database e leggere da un file flat.

Quello che segue è un processo graduale per creare una semplice applicazione:

Passaggio 1: scaricare e installare le dipendenze richieste per il progetto

Crea una cartella denominata resolver-app. Cambia la tua directory inresolver-appdal terminale. Successivamente, seguire i passaggi da 3 a 5 nel capitolo Configurazione dell'ambiente.

Passaggio 2: creare uno schema

Aggiungi il file schema.graphql nella cartella del progetto resolver-app e aggiungi il seguente codice:

type Query { 
   greeting:String
   students:[Student]
   studentById(id:ID!):Student 
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   password:String
   collegeId:String
}

Il file dello schema mostra che l'utente può interrogare per saluto, studenti e studentById . Per recuperare gli studenti con un ID specifico, usiamodata type ID!che mostra un campo identificativo univoco non annullabile. Il campo degli studenti restituisce un array di studenti e il saluto restituisce un semplice valore di stringa.

Passaggio 3: creazione del risolutore

Crea un file resolvers.js nella cartella del progetto e aggiungi il seguente codice -

const db = require('./db')
const Query = {
   //resolver function for greeting
   greeting:() => {
      return "hello from  TutorialsPoint !!!"
   },
   
   //resolver function for students returns list
   students:() => db.students.list(),

   //resolver function for studentbyId
   studentById:(root,args,context,info) => {
      //args will contain parameter passed in query
      return db.students.get(args.id);
   }
}
module.exports = {Query}

Qui, studentById accetta tre parametri. Come discusso in questo capitolo, studentId può essere recuperato da args; root conterrà l'oggetto Query stesso. Per restituire uno studente specifico, dobbiamo chiamare il metodo get con il parametro id nella raccolta degli studenti.

Qui saluto, studenti, studentById sono i risolutori che gestiscono la query.students resolver functionrestituisce un elenco di studenti dal livello di accesso ai dati. Per accedere alle funzioni del resolver al di fuori del modulo, l'oggetto Query deve essere esportato utilizzando module.exports.

Passaggio 4: eseguire l'applicazione

Crea un file server.js. Fare riferimento al passaggio 8 nel capitolo Configurazione dell'ambiente. Esegui il comando npm start nel terminale. Il server sarà attivo e funzionante sulla porta 9000. Qui, usiamo GraphiQL come client per testare l'applicazione.

Apri il browser e inserisci l'URL, http://localhost:9000/graphiql. Digita la seguente query nell'editor:

{  
   studentById(id:"S1001") {
      id
      firstName
      lastName
   }
}

L'output per la query sopra è come mostrato di seguito:

{
   "data": {
      "studentById": {
         "id": "S1001",
         "firstName": "Mohtashim",
         "lastName": "Mohammad"
      }
   }
}