GraphQL - Résolveur
Resolver est une collection de fonctions qui génèrent une réponse pour une requête GraphQL. En termes simples, un résolveur agit comme un gestionnaire de requêtes GraphQL. Chaque fonction de résolution dans un schéma GraphQL accepte quatre arguments positionnels comme indiqué ci-dessous -
fieldName:(root, args, context, info) => { result }
Un exemple de fonctions de résolveur est illustré ci-dessous -
//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);
}
Vous trouverez ci-dessous les arguments de position et leur description -
N ° Sr. | Arguments et description |
---|---|
1 | root Objet qui contient le résultat renvoyé par le résolveur sur le champ parent. |
2 | args Un objet avec les arguments passés dans le champ de la requête. |
3 | context Il s'agit d'un objet partagé par tous les résolveurs dans une requête particulière. |
4 | info Il contient des informations sur l'état d'exécution de la requête, y compris le nom du champ, le chemin d'accès au champ à partir de la racine. |
Format de résultat du résolveur
Les résolveurs dans GraphQL peuvent renvoyer différents types de valeurs comme indiqué ci-dessous -
N ° Sr. | Arguments et description |
---|---|
1 | null or undefined cela indique que l'objet n'a pas pu être trouvé |
2 | array ceci n'est valable que si le schéma indique que le résultat d'un champ doit être une liste |
3 | promise les résolveurs effectuent souvent des actions asynchrones comme l'extraction d'une base de données ou d'une API backend, afin de pouvoir renvoyer des promesses |
4 | scalar or object un résolveur peut également renvoyer d'autres valeurs |
Illustration
Créons une application simple pour comprendre le résolveur. Cela créera un schéma pour interroger un étudiant par identifiant à partir du serveur. Les données des élèves seront stockées dans un fichier plat et nous utiliserons un module de nœud appelénotarealdb pour simuler une base de données et lire à partir d'un fichier plat.
Ce qui suit est un processus par étapes pour créer une application simple -
Étape 1 - Téléchargez et installez les dépendances requises pour le projet
Créez un dossier nommé resolver-app. Changez votre répertoire enresolver-appdepuis le terminal. Plus tard, suivez les étapes 3 à 5 du chapitre Configuration de l'environnement.
Étape 2 - Créer un schéma
Ajoutez le fichier schema.graphql dans le dossier du projet resolver-app et ajoutez le code suivant -
type Query {
greeting:String
students:[Student]
studentById(id:ID!):Student
}
type Student {
id:ID!
firstName:String
lastName:String
password:String
collegeId:String
}
Le fichier de schéma montre que l'utilisateur peut interroger les messages d' accueil, les étudiants et studentById . Pour récupérer des étudiants avec un identifiant spécifique, nous utilisonsdata type ID!qui affiche un champ d'identifiant unique non nullable. Le champ des étudiants renvoie un tableau d'étudiants et le message d'accueil renvoie une valeur de chaîne simple.
Étape 3 - Créer un résolveur
Créer un fichier resolvers.js dans le dossier du projet et ajoutez le code suivant -
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}
Ici, studentById prend trois paramètres. Comme discuté dans ce chapitre, le studentId peut être récupéré depuis args; root contiendra l'objet Query lui-même. Pour renvoyer un étudiant spécifique, nous devons appeler la méthode get avec le paramètre id dans la collection des étudiants.
Ici, salutation, étudiants, studentById sont les résolveurs qui gèrent la requête.students resolver functionrenvoie une liste d'étudiants de la couche d'accès aux données. Pour accéder aux fonctions de résolution en dehors du module, l'objet Requête doit être exporté à l'aide de module.exports.
Étape 4 - Exécutez l'application
Créez un fichier server.js. Reportez-vous à l'étape 8 du chapitre Configuration de l'environnement. Exécutez la commande npm start dans le terminal. Le serveur sera opérationnel sur le port 9000. Ici, nous utilisons GraphiQL comme client pour tester l'application.
Ouvrez le navigateur et entrez l'url, http://localhost:9000/graphiql. Tapez la requête suivante dans l'éditeur -
{
studentById(id:"S1001") {
id
firstName
lastName
}
}
Le résultat de la requête ci-dessus est comme indiqué ci-dessous -
{
"data": {
"studentById": {
"id": "S1001",
"firstName": "Mohtashim",
"lastName": "Mohammad"
}
}
}