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.