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