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