0% ont trouvé ce document utile (0 vote)
23 vues5 pages

Tp3: Système de Gestion de Tâches Avec Graphql A.U.: 2024/2025

Le document présente un projet de gestion de tâches utilisant GraphQL avec Node.js et Express. Il décrit les étapes pour configurer l'environnement, créer un schéma et des résolveurs, ainsi que démarrer un serveur GraphQL. Des fonctionnalités supplémentaires sont également proposées, telles que l'ajout de nouvelles tâches et la modification de descriptions.

Transféré par

asma.belkahla.chaabane
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
23 vues5 pages

Tp3: Système de Gestion de Tâches Avec Graphql A.U.: 2024/2025

Le document présente un projet de gestion de tâches utilisant GraphQL avec Node.js et Express. Il décrit les étapes pour configurer l'environnement, créer un schéma et des résolveurs, ainsi que démarrer un serveur GraphQL. Des fonctionnalités supplémentaires sont également proposées, telles que l'ajout de nouvelles tâches et la modification de descriptions.

Transféré par

asma.belkahla.chaabane
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TP3 : Système de gestion de tâches avec GraphQL A.U.

: 2024/2025
Matière : SoA et Microservices
Enseignant : Dr. Salah Gontara
Classe : 4Info

OBJECTIF(S):

• Comprendre comment configurer et utiliser GraphQL avec [Link] et Express.


• Apprendre à créer un schéma GraphQL et des résolveurs pour gérer les requêtes et les
mutations pour une API simple de gestion de tâches.

OUTILS UTILISÉS :

node, graphql, express, appollo

Utilisation de GraphQL

GraphQL est un langage de requête pour les API et un runtime pour


répondre à ces requêtes avec vos données existantes. GraphQL
fournit une description complète et compréhensible des données de
votre API, donne aux clients le pouvoir de demander exactement ce
dont ils ont besoin et rien de plus, facilite l'évolution des API au fil
du temps et active de puissants outils de développement.

1. Installer NodeJS:
• NodeJS : Installez Nodejs depuis le site officiel
[Link]
Sur ubuntu : sudo snap install node --classic
2. Créez un répertoire pour l'exemple de projet tp-graphql et accédez-y :
mkdir tp-graphql
cd tp-graphql
npm init -y
3. Installez les dépendances de javascript pour graphql et le projet:
npm install express @apollo/server body-parser @graphql-tools/schema graphql

1
4. Créez un fichier « [Link] » contenant le schéma de données pour GraphQL :

type Task {
id: ID!
title: String!
description: String!
completed: Boolean!
}

type Query {
task(id: ID!): Task
tasks: [Task]
}

type Mutation {
addTask(title: String!, description: String!, completed: Boolean!): Task
completeTask(id: ID!): Task
}

5. Créez un fichier « [Link] » qui va importer le schéma de données pour


GraphQL.

const fs = require('fs');
const path = require('path');
const { buildSchema } = require('graphql');
const { promisify } = require('util');
const readFileAsync = promisify([Link]);

async function getTaskSchema() {


const schemaPath = [Link](__dirname, '[Link]');
try {
const schemaString = await readFileAsync(schemaPath, { encoding: 'utf8'
});
return buildSchema(schemaString);
} catch (error) {
[Link]("Error reading the schema file:", error);
throw error;
}
}

[Link] = getTaskSchema();

2
6. Créez un fichier « [Link] » contenant le résolveur de données pour GraphQL :

// [Link]

let tasks = [
{
id: '1',
title: 'Développement Front-end pour Site E-commerce',
description: 'Créer une interface utilisateur réactive en utilisant React et Redux
pour un site e-commerce.',
completed: false,
},
{
id: '2',
title: 'Développement Back-end pour Authentification Utilisateur',
description: "Implémenter un système d'authentification et d'autorisation pour une
application web en utilisant [Link], Express, et [Link]",
completed: false,
},
{
id: '3',
title: 'Tests et Assurance Qualité pour Application Web',
description: 'Développer et exécuter des plans de test et des cas de test
complets.',
completed: false,
},
];

const taskResolver = {
Query: {
task: (_, { id }) => [Link](task => [Link] === id),
tasks: () => tasks,
},
Mutation: {
addTask: (_, { title, description, completed }) => {
const task = {
id: String([Link] + 1),
title,
description,
completed,
};
[Link](task);
return task;
},
completeTask: (_, { id }) => {
const taskIndex = [Link](task => [Link] === id);
if (taskIndex !== -1) {
tasks[taskIndex].completed = true;
return tasks[taskIndex];
}
return null;
},
},
};

[Link] = taskResolver;

3
7. Créer un fichier [Link] et y configurer une instance d'express avec une route pour
gérer les requêtes GraphQL :
const express = require('express');
const { ApolloServer } = require('@apollo/server');
const { expressMiddleware } = require('@apollo/server/express4');
const { json } = require('body-parser');
const { addResolversToSchema } = require('@graphql-tools/schema');
const taskSchemaPromise = require('./taskSchema');
const taskResolver = require('./taskResolver');

const app = express();

async function setupServer() {


try {
const taskSchema = await taskSchemaPromise;
const schemaWithResolvers = addResolversToSchema({
schema: taskSchema,
resolvers: taskResolver,
});

const server = new ApolloServer({


schema: schemaWithResolvers,
});

await [Link]();

[Link](
'/graphql',
json(),
expressMiddleware(server)
);

const PORT = [Link] || 5000;


[Link](PORT, () => [Link](`Server started on port ${PORT}`));
} catch (error) {
[Link]('Failed to start the Apollo server:', error);
}
}

setupServer();

8. Démarrer le serveur graphql avec :


node [Link]
9. Naviguer vers pour ouvrir l'interface graphique Studio Sandobox d’Appollo :
[Link]

4
10. Créer des requêtes GraphQL pour
• Récupérer toutes les tâches
• Ajouter une nouvelle tâche
• Marquer une tâche comme terminée

11. Ajouter au schéma de données une variable duration de type entier et apporter les
changements nécessaires.

12. Ajouter une mutation changeDescription pour changer la description de la tâche au


schéma et au résolveur.

13. Ajouter également une mutation deleteTask pour effacer une tâche par son id.

Vous aimerez peut-être aussi