GraphQL - Резолвер

Resolver - это набор функций, которые генерируют ответ на запрос GraphQL. Проще говоря, преобразователь действует как обработчик запросов GraphQL. Каждая функция преобразователя в схеме GraphQL принимает четыре позиционных аргумента, как указано ниже:

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

Пример функций преобразователя показан ниже -

//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);
}

Ниже приведены позиционные аргументы и их описание -

Sr.No. Аргументы и описание
1

root

Объект, который содержит результат, возвращенный преобразователем в родительском поле.

2

args

Объект с аргументами, переданными в поле запроса.

3

context

Это объект, используемый всеми распознавателями в конкретном запросе.

4

info

Он содержит информацию о состоянии выполнения запроса, включая имя поля, путь к полю от корня.

Формат результата резолвера

Резольверы в GraphQL могут возвращать различные типы значений, как указано ниже -

Sr.No. Аргументы и описание
1

null or undefined

это означает, что объект не может быть найден

2

array

это допустимо только в том случае, если схема указывает, что результатом поля должен быть список

3

promise

преобразователи часто выполняют асинхронные действия, такие как выборка из базы данных или серверного API, поэтому они могут возвращать обещания

4

scalar or object

преобразователь также может возвращать другие значения

Иллюстрация

Давайте создадим простое приложение для понимания резольвера. Это создаст схему для запроса студента по идентификатору с сервера. Данные учеников будут храниться в плоском файле, и мы будем использовать модуль узла под названиемnotarealdb для подделки базы данных и чтения из плоского файла.

Ниже приведен пошаговый процесс создания простого приложения.

Шаг 1 - Загрузите и установите необходимые зависимости для проекта

Создайте папку с именем resolver-app. Измените свой каталог наresolver-appс терминала. Позже выполните шаги с 3 по 5 в главе «Настройка среды».

Шаг 2 - Создайте схему

Добавьте файл schema.graphql в приложение-преобразователь папки проекта и добавьте следующий код -

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

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

Файл схемы показывает, что пользователь может запрашивать приветствие, студенты и studentById . Чтобы получить студентов с определенным идентификатором, мы используемdata type ID!который показывает поле уникального идентификатора, не допускающее значения NULL. Поле студентов возвращает массив студентов, а приветствие возвращает простое строковое значение.

Шаг 3 - Создайте резолвер

Создать файл resolvers.js в папке проекта и добавьте следующий код -

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}

Здесь studentById принимает три параметра. Как обсуждалось в этой главе, studentId можно получить из args; root будет содержать сам объект Query. Чтобы вернуть конкретного студента, нам нужно вызвать метод get с параметром id в коллекции студентов.

Здесь приветствие, студенты, studentById - это преобразователи, которые обрабатывают запрос.students resolver functionвозвращает список студентов из уровня доступа к данным. Чтобы получить доступ к функциям распознавателя вне модуля, объект Query должен быть экспортирован с помощью module.exports.

Шаг 4 - Запустите приложение

Создайте файл server.js. См. Шаг 8 в главе «Настройка среды». Выполните в терминале команду npm start. Сервер будет работать на 9000 порте. Здесь мы используем GraphiQL в качестве клиента для тестирования приложения.

Откройте браузер и введите URL-адрес, http://localhost:9000/graphiql. Введите в редакторе следующий запрос -

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

Результат для вышеуказанного запроса показан ниже -

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