Examen Révision Services Web GraphQL
Examen Révision Services Web GraphQL
Examen Révision Services Web GraphQL
Exercice 1 : JAX-RS
Etude de cas : Système de suivi des projets
Dans le but d’aider les entreprises de développement à suivre et gérer les projets, on se
propose de mettre en place un service Web leur permettant d’ajouter, consulter les projets, se
renseigner sur leurs date de début et fin ainsi que d’avoir une supervision continue par un chef
de projet.
Un projet possède les informations suivantes : un identifiant, un nom, une description, une
date de début, une date de fin et un Chef de projet .Ce dernier est caractérisé par un matricule
(son identifiant) , un nom et prénom, un numéro de téléphone et un email.
Les ressources REST qui constituent le service web sont présentées ci-dessous.
Page 1 sur 8
● Ajout d’un projet
Body {
"id": "1",
"nom": "Application web",
"description": "développement d'une application web avec Spring boot
et Angular",
"dateDebut": "23/10/2021",
"dateFin": "23/10/2022",
"chefProjet": {
"matricule": "matricule123",
"nom": "Mohamed",
"prenom": "Salah",
"numtel": "12345678",
"email": "mohamedsalah@gmail.com"
}}
Body [
{
"id": "1",
Page 2 sur 8
"nom": "Application web",
"description": "développement d'une application web avec Spring
boot and Angular",
"dateDebut": "23/10/2021",
"dateFin": "23/10/2022",
"chefProjet": {
"matricule": "matricule123",
"nom": "Mohamed",
"prenom": "Salah",
"email": "mohamedsalah@gmail.com",
"numtel": "12345678"
}
},
{
"id": "2",
"nom": "Application mobile",
"description": "développement d'une application mobile avec Spring
boot et React Native",
"dateDebut": "01/10/2021",
"dateFin": "01/10/2022",
"chefProjet": {
"matricule": "matricule456",
"nom": "Karim",
"prenom": "Ben Mohamed",
"email": "Karimbenmohamed@gmail.com",
"numtel": "87654321"
}}
]
Page 3 sur 8
Body [
{
"id": "2",
"nom": "Application mobile",
"description": "développement d'une application mobile avec Spring
boot et React Native",
"dateDebut": "01/10/2021",
"dateFin": "01/10/2022",
"chefProjet": {
"matricule": "matricule456",
"nom": "Karim",
"prenom": "Ben Mohamed",
"email": "Karimbenmohamed@gmail.com",
"numtel": "87654321"
}
}
]
Body {
"id": "2",
"nom": "Application Cross Plateforme",
"description": "développement d'une application mobile avec Spring
boot et React Native",
"dateDebut": "01/10/2021",
"dateFin": "01/10/2022",
}
Page 4 sur 8
Body true / false
Travail demandé :
@Path("/projets") [2]
public class ProjetRessource {
public static List<Projet> projets=new ArrayList<Projet>();
@POST [3]
@Consumes(MediaType.APPLICATION_JSON) [4]
@Produces(MediaType.TEXT_PLAIN) [5]
public Response [6] ajouterProjet(Projet p) {
if(projets.add(p)) {
return Response.status(Status.CREATED).entity("Projet a été
ajouté avec succès").build(); [7]
}
return Response.status(Status.NOT_FOUND).build(); [8]
}
@PUT [9]
@Path("{id}") [10]
@Consumes(MediaType.APPLICATION_JSON) [11]
public boolean [12] modifierProjet(Projet p [13], @PathParam(value="id") int
id [14] ) {
int index= this.getIndexById(id);
if (index!=-1) {
projets.set(index, p);
Page 5 sur 8
return true [15];
}
return false [16];
}
Exercice2 GraphQL
Etude de cas: Gestion des animaux d’un ZOO
On vise à mettre en place une application Java pour la gestion des animaux d’un Zoo
prend en charge deux entités Zoo et Animal comme illustré dans la figure ci-dessous.
Cette application serait exposée en tant qu’un API GraphQL afin de faciliter la
communication avec d’autres applications hétérogènes.
NB : Les attributs code et nom représentent respectivement les clés primaires des
entités Animal et Zoo. "h_ouvert" et "h_ferm" indiquent les horaires d’ouverture et de
fermeture du zoo.
Zoo Animal
GraphQL
Structure de réponse Fixé par [1] le Client
4. En vous référant à la définition des classes données dans la Figure1 et aux signatures
des méthodes suivantes :
type Zoo {
nom: String
adresse: String
h_ouvert: String
h_ferm: String
prix: Float
}
type Animal {
code: String [1] !
nom: String
age: Int
poids: Int
}
Page 7 sur 8
[5] type MutationZoo {
[6] deleteAnimal (code : String) : Boolean
[7] ajouterAnimal(code : String, nom : String, age :Int, poids :Float) : Animal
}
schema {
query: [8] QueryZoo
mutation: [9] MutationZoo
}
Page 8 sur 8