GraphQL - Esquema

Un esquema GraphQL es el núcleo de cualquier implementación de servidor GraphQL. Describe la funcionalidad disponible para las aplicaciones cliente que se conectan a él. Podemos usar cualquier lenguaje de programación para crear un esquema GraphQL y construir una interfaz a su alrededor.

El tiempo de ejecución de GraphQL define un esquema genérico basado en gráficos para publicar las capacidades del servicio de datos que representa. Las aplicaciones cliente pueden consultar el esquema dentro de sus capacidades. Este enfoque disocia a los clientes de los servidores y permite que ambos evolucionen y escalen de forma independiente.

En este capítulo, usamos el servidor Apollo para ejecutar consultas GraphQL. losmakeExecutableSchema La función en graphql-tools le ayuda a vincular esquemas y resolutores.

Sintaxis de la función makeExecutableSchema

los makeExecutableSchemala función toma un solo argumento {} del tipo de objeto. La sintaxis para usar esta función se da a continuación:

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

No Señor. Descripción de parámetros
1

typeDefs

Este es un argumento requerido. Representa una consulta GraphQL como una cadena UTF-8.

2

Resolvers

Este es un argumento opcional (objeto vacío por defecto). Tiene funciones que manejan la consulta.

3

logger

Este es un argumento opcional y se puede utilizar para imprimir errores en la consola del servidor.

4

parseOptions

Este es un argumento opcional y permite la personalización del análisis cuando se especifica typeDefs como una cadena.

5

allowUndefinedInResolve

Esto es cierto por defecto. Cuando se establece en falso, hace que sus funciones de resolución arrojen errores si devuelven undefined.

6

resolverValidationOptions

Este es un argumento opcional y acepta un objeto con propiedades booleanas.

7

inheritResolversFromInterfaces

Este es un argumento opcional y acepta un argumento booleano para verificar la herencia de objetos de los resolutores.

Ilustración

Creemos una aplicación sencilla para comprender este esquema. Esto creará un esquema para consultar la lista de estudiantes desde el servidor. Los datos del estudiante se almacenarán en un archivo plano y usaremos un módulo de nodo llamadonotarealdb para falsificar una base de datos y leer desde el archivo plano.

Paso 1: descargue e instale las dependencias necesarias para el proyecto

Crea una carpeta llamada schema-app. Cambie su directorio a schema-app desde la terminal. Luego, siga los pasos 3 a 5 explicados en el capítulo Configuración del entorno para completar la descarga y el proceso de instalación.

Paso 2: crea un esquema

Añadir schema.graphql archivo en la carpeta del proyecto, schema-app y agregue el siguiente código -

type Query {
   greeting:String
   students:[Student]
}

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

La raíz del esquema será el tipo de consulta. La consulta tiene dos campos: saludo y Estudiantes, que devuelve Cadena y una lista de estudiantes, respectivamente. Student se declara como un tipo de objeto ya que contiene varios campos. El campo de ID se declara como no anulable.

Paso 3: crear un solucionador

Crea un archivo resolvers.js en la carpeta del proyecto y agregue el siguiente código:

const db = require('./db')
const Query = {
   greeting:() => {
      return "hello from  TutorialsPoint !!!"
   },
   students:() => db.students.list()
}

module.exports = {Query}

Aquí el saludo y los estudiantes son los solucionadores que manejan la consulta. students resolver functiondevuelve una lista de estudiantes de la capa de acceso a datos. Para acceder a las funciones de resolución fuera del módulo, el objeto de consulta debe exportarse utilizandomodule.exports.

Paso 4: ejecutar la aplicación

Cree un archivo server.js y consulte el paso 8 en el Capítulo de configuración del entorno. El siguiente paso es ejecutar el comando npm start en la terminal. El servidor estará funcionando en el puerto 9000. Aquí, usamos GraphiQL como cliente para probar la aplicación. Abra el navegador y escriba la URL,http://localhost:9000/graphiql.

Escriba la siguiente consulta en el editor:

{
   greeting
   students {
      id
      firstName
      lastName
   }
}

La consulta mostrará el resultado como se muestra a continuación:

Note- Podemos reemplazar el archivo Students.json con una llamada a la API RESTful para recuperar datos de los estudiantes o incluso una base de datos real como MySQL o MongoDB. GraphQL se convierte en un envoltorio delgado alrededor de la capa de aplicación original para mejorar el rendimiento.