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"
}
}
}