GraphQL - Esquema
Um esquema GraphQL está no centro de qualquer implementação de servidor GraphQL. Ele descreve a funcionalidade disponível para os aplicativos cliente que se conectam a ele. Podemos usar qualquer linguagem de programação para criar um esquema GraphQL e construir uma interface em torno dele.
O tempo de execução GraphQL define um esquema genérico baseado em gráfico para publicar os recursos do serviço de dados que ele representa. Os aplicativos cliente podem consultar o esquema dentro de seus recursos. Essa abordagem separa os clientes dos servidores e permite que ambos evoluam e escalem independentemente.
Neste capítulo, usamos o servidor Apollo para executar consultas GraphQL. omakeExecutableSchema A função em graphql-tools ajuda você a vincular esquema e resolvedores.
Sintaxe da função makeExecutableSchema
o makeExecutableSchemafunção recebe um único argumento {} do tipo Object. A sintaxe para usar esta função é fornecida abaixo -
import { makeExecutableSchema } from 'graphql-tools';
const jsSchema = makeExecutableSchema({
typeDefs,
resolvers, // optional
logger, // optional
allowUndefinedInResolve = false, // optional
resolverValidationOptions = {}, // optional
directiveResolvers = null, // optional
schemaDirectives = null, // optional
parseOptions = {}, // optional
inheritResolversFromInterfaces = false // optional
});
Sr. Não. | Parâmetro e Descrição |
---|---|
1 | typeDefs Este é um argumento obrigatório. Ele representa uma consulta GraphQL como uma string UTF-8. |
2 | Resolvers Este é um argumento opcional (objeto vazio por padrão). Isso tem funções que tratam da consulta. |
3 | logger Este é um argumento opcional e pode ser usado para imprimir erros no console do servidor. |
4 | parseOptions Este é um argumento opcional e permite a personalização da análise ao especificar typeDefs como uma string. |
5 | allowUndefinedInResolve Isso é verdade por padrão. Quando definido como falso, faz com que suas funções de resolução gerem erros se retornarem indefinido. |
6 | resolverValidationOptions Este é um argumento opcional e aceita um objeto com propriedades booleanas. |
7 | inheritResolversFromInterfaces Este é um argumento opcional e aceita um argumento booleano para verificar a herança do objeto resolvedor. |
Ilustração
Vamos criar um aplicativo simples para entender esse esquema. Isso criará um esquema para consultar a lista de alunos 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 do arquivo simples.
Etapa 1 - Baixe e instale as dependências necessárias para o projeto
Crie uma pasta chamada schema-app. Mude seu diretório para schema-app no terminal. Em seguida, siga as etapas 3 a 5 explicadas no capítulo Configuração do ambiente para concluir o download e o processo de instalação.
Etapa 2 - Criar um esquema
Adicionar schema.graphql arquivo na pasta do projeto, schema-app e adicione o seguinte código -
type Query {
greeting:String
students:[Student]
}
type Student {
id:ID!
firstName:String
lastName:String
password:String
collegeId:String
}
A raiz do esquema será o tipo Consulta. A consulta tem dois campos - saudação e Alunos que retorna String e uma lista de alunos, respectivamente. O aluno é declarado como um tipo de objeto, pois contém vários campos. O campo ID é declarado como não anulável.
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 = {
greeting:() => {
return "hello from TutorialsPoint !!!"
},
students:() => db.students.list()
}
module.exports = {Query}
Aqui, saudação e alunos 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 usandomodule.exports.
Etapa 4 - Executar o aplicativo
Crie um arquivo server.js e consulte a etapa 8 no capítulo Configuração de ambiente. A próxima etapa é executar 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 -
{
greeting
students {
id
firstName
lastName
}
}
A consulta exibirá a saída conforme mostrado abaixo -
Note- Podemos substituir o students.json por uma chamada de API RESTful para recuperar os dados dos alunos ou até mesmo um banco de dados real como MySQL ou MongoDB. GraphQL se torna um envoltório fino em torno de sua camada de aplicativo original para melhorar o desempenho.