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.