GraphQL - Resolver

Resolver é uma coleção de funções que geram resposta para uma consulta GraphQL. Em termos simples, um resolvedor atua como um manipulador de consultas GraphQL. Cada função de resolução em um esquema GraphQL aceita quatro argumentos posicionais conforme fornecido abaixo -

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

Um exemplo de funções do resolvedor é mostrado abaixo -

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

A seguir estão os argumentos posicionais e suas descrições -

Sr. Não. Argumentos e Descrição
1

root

O objeto que contém o resultado retornado do resolvedor no campo pai.

2

args

Um objeto com os argumentos passados ​​para o campo da consulta.

3

context

Este é um objeto compartilhado por todos os resolvedores em uma consulta específica.

4

info

Ele contém informações sobre o estado de execução da consulta, incluindo o nome do campo e o caminho da raiz para o campo.

Formato do resultado do resolvedor

Os resolvedores em GraphQL podem retornar diferentes tipos de valores, conforme fornecido abaixo -

Sr. Não. Argumentos e Descrição
1

null or undefined

isso indica que o objeto não foi encontrado

2

array

isso só é válido se o esquema indicar que o resultado de um campo deve ser uma lista

3

promise

resolvedores costumam fazer ações assíncronas como buscar em um banco de dados ou API de back-end, para que possam retornar promessas

4

scalar or object

um resolvedor também pode retornar outros valores

Ilustração

Vamos criar um aplicativo simples para entender o resolvedor. Isso criará um esquema para consultar um aluno por id do servidor. Os dados do aluno serão armazenados em um arquivo simples e usaremos um módulo de nó chamadonotarealdb para falsificar um banco de dados e ler um arquivo simples.

A seguir está um processo passo a passo para criar um aplicativo simples -

Etapa 1 - Baixe e instale as dependências necessárias para o projeto

Crie uma pasta chamada resolver-app. Mude seu diretório pararesolver-appdo terminal. Posteriormente, siga as etapas 3 a 5 no capítulo Configuração do ambiente.

Etapa 2 - Criar um esquema

Adicione o arquivo schema.graphql na pasta do projeto resolver-app e adicione o seguinte código -

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

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

O arquivo de esquema mostra que o usuário pode consultar saudação, alunos e studentById . Para recuperar alunos com id específico, usamosdata type ID!que mostra um campo identificador exclusivo não anulável. O campo students retorna uma matriz de alunos e greeting retorna um valor de string simples.

Etapa 3 - Criar resolvedor

Crie um arquivo resolvers.js na pasta do projeto e adicione o seguinte código -

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}

Aqui, studentById assume três parâmetros. Conforme discutido neste capítulo, o studentId pode ser recuperado de args; root conterá o próprio objeto Query. Para retornar um aluno específico, precisamos chamar o método get com o parâmetro id na coleção de alunos.

Aqui , saudando, alunos, studentById são os resolvedores que tratam da consulta.students resolver functionretorna uma lista de alunos da camada de acesso a dados. Para acessar as funções do resolvedor fora do módulo, o objeto Query deve ser exportado usando module.exports.

Etapa 4 - Executar o aplicativo

Crie um arquivo server.js. Consulte a etapa 8 no capítulo Configuração de ambiente. Execute o comando npm start no terminal. O servidor estará instalado e funcionando na porta 9000. Aqui, usamos GraphiQL como um cliente para testar o aplicativo.

Abra o navegador e digite o url, http://localhost:9000/graphiql. Digite a seguinte consulta no editor -

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

O resultado da consulta acima é mostrado abaixo -

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