GraphQL - Schéma
Un schéma GraphQL est au cœur de toute implémentation de serveur GraphQL. Il décrit les fonctionnalités disponibles pour les applications clientes qui s'y connectent. Nous pouvons utiliser n'importe quel langage de programmation pour créer un schéma GraphQL et construire une interface autour de lui.
Le runtime GraphQL définit un schéma générique basé sur un graphique pour publier les fonctionnalités du service de données qu'il représente. Les applications clientes peuvent interroger le schéma dans la limite de ses capacités. Cette approche dissocie les clients des serveurs et permet à la fois d'évoluer et d'évoluer indépendamment.
Dans ce chapitre, nous utilisons le serveur Apollo pour exécuter des requêtes GraphQL. lemakeExecutableSchema La fonction dans graphql-tools vous aide à lier le schéma et les résolveurs.
Syntaxe de la fonction makeExecutableSchema
le makeExecutableSchemaLa fonction prend un seul argument {} de type Object. La syntaxe d'utilisation de cette fonction est donnée ci-dessous -
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
});
N ° Sr. | Paramètre et description |
---|---|
1 | typeDefs C'est un argument requis. Il représente une requête GraphQL sous forme de chaîne UTF-8. |
2 | Resolvers C'est un argument optionnel (objet vide par défaut). Cela a des fonctions qui gèrent la requête. |
3 | logger Cet argument est facultatif et peut être utilisé pour imprimer des erreurs sur la console du serveur. |
4 | parseOptions Il s'agit d'un argument facultatif qui permet la personnalisation de l'analyse lors de la spécification de typeDefs sous forme de chaîne. |
5 | allowUndefinedInResolve Ceci est vrai par défaut. Lorsqu'elle est définie sur false, vos fonctions de résolution lancent des erreurs si elles renvoient undefined. |
6 | resolverValidationOptions Il s'agit d'un argument facultatif et accepte un objet avec des propriétés booléennes. |
sept | inheritResolversFromInterfaces Il s'agit d'un argument facultatif et accepte un argument booléen pour vérifier l'héritage des objets des résolveurs. |
Illustration
Créons une application simple pour comprendre ce schéma. Cela créera un schéma pour interroger la liste des étudiants à partir du serveur. Les données des élèves seront stockées dans un fichier plat et nous utiliserons un module de nœud appelénotarealdb pour simuler une base de données et lire à partir du fichier plat.
Étape 1 - Téléchargez et installez les dépendances requises pour le projet
Créez un dossier nommé schema-app. Changez votre répertoire en schema-app depuis le terminal. Suivez ensuite les étapes 3 à 5 expliquées dans le chapitre Configuration de l'environnement pour terminer le téléchargement et l'installation.
Étape 2 - Créer un schéma
Ajouter schema.graphql fichier dans le dossier du projet, schema-app et ajoutez le code suivant -
type Query {
greeting:String
students:[Student]
}
type Student {
id:ID!
firstName:String
lastName:String
password:String
collegeId:String
}
La racine du schéma sera le type de requête. La requête comporte deux champs - salutation et étudiants qui renvoie respectivement une chaîne et une liste d'étudiants. L'élève est déclaré comme un type d'objet car il contient plusieurs champs. Le champ ID est déclaré non nul.
Étape 3 - Créer un résolveur
Créer un fichier resolvers.js dans le dossier du projet et ajoutez le code suivant -
const db = require('./db')
const Query = {
greeting:() => {
return "hello from TutorialsPoint !!!"
},
students:() => db.students.list()
}
module.exports = {Query}
Ici, le message d'accueil et les étudiants sont les résolveurs qui gèrent la requête. students resolver functionrenvoie une liste d'étudiants de la couche d'accès aux données. Pour accéder aux fonctions du résolveur en dehors du module, l'objet Requête doit être exporté en utilisantmodule.exports.
Étape 4 - Exécutez l'application
Créez un fichier server.js et reportez-vous à l'étape 8 du chapitre Configuration de l'environnement. L'étape suivante consiste à exécuter la commande npm start dans le terminal. Le serveur sera opérationnel sur le port 9000. Ici, nous utilisons GraphiQL comme client pour tester l'application. Ouvrez le navigateur et saisissez l'URL,http://localhost:9000/graphiql.
Tapez la requête suivante dans l'éditeur -
{
greeting
students {
id
firstName
lastName
}
}
La requête affichera la sortie comme indiqué ci-dessous -

Note- Nous pouvons remplacer le student.json par un appel API RESTful pour récupérer les données des étudiants ou même une vraie base de données comme MySQL ou MongoDB. GraphQL devient une enveloppe fine autour de votre couche d'application d'origine pour améliorer les performances.