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.