-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelper.js
188 lines (148 loc) · 8.95 KB
/
helper.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
//Méthode permet de renvoie un méssage lors de la requêtes du client.
exports.success = (message, data) => {
return {
message,
data,
};
};
//Méthode permettant de généré un id unique
exports.getUniqueId = (data) => {
const pokemonsIds = data.map(({ id }) => id);
const idMax = pokemonsIds.reduce((a, b) => Math.max(a, b));
const uniqueId = idMax + 1;
return uniqueId;
};
/**************Les point de terminaises statiques *****/
/*************METHODE GET **************/
app.get("/", (req, res) => res.send("Hello again, Express !")); //méthode get pour affiché un méssage à l'utilisateur.
/* EXEMPLE : */
app.get("/api/pokemons/", (req, res) => {
const message = "La liste des pokémon à bien été récupérée. 200";
res.json(success(message, pokemons));
});
/*REQUETE SELON L'ID */
app.get("/api/pokemons/:id", (req, res) => {
const id = parseInt(req.params.id); //Permmet de récupérer les paramètres contenus dans l'url
const pokemon = pokemons.find((pokemon) => pokemon.id === id); //On stoke les paramètres du pokemon correspondant à l'id passée en requete dans notre variable pokemon.
const message = "un pokémon à bien été trouvé 200"; //on écrit le méssage de la requette.
res.json(success(message, pokemon)); //cette méthode nous permet d'affiché la réponse à la requette sous forme d'un fichier JSON.
});
/***********METHODE POST *******************/
app.post("/api/pokemons", (req, res) => {
const id = getUniqueId(pokemons);
const pokemonCreated = {
...req.body,
...{ id: id, created: new Date() },
};
pokemons.push(pokemonCreated);
const message = `Le pokemon ${pokemonCreated.name} à bien été crée.`;
res.json(success(message, pokemonCreated));
});
/*********METHODE PUT **********************/
app.put("/api/pokemons/:id", (req, res) => {
const id = parseInt(req.params.id);
const pokemonUpdated = { ...req.body, id: id };
pokemons = pokemons.map((pokemon) => {
return pokemon.id === id ? pokemonUpdated : pokemon;
});
const message = `Le pokémon ${pokemonUpdated.name} à bien été modifié`;
res.json(success(message, pokemonUpdated));
});
/************METHODE DELETE *******************/
app.delete("/api/pokemons/:id", async (req, res) => {
const id = parseInt(req.params.id);
const pokemonDeleted = pokemons.find((pokemon) => pokemon.id === id);
pokemons = pokemons.map((pokemon) => {
if (pokemon.id !== id) return pokemon;
});
const message = `Le pokemonde ${pokemonDeleted.name} à bien été supprimé`;
res.json(success(message, pokemonDeleted));
});
/*app.get("/api/pokemons/:id/:name", (req, res) => {
const id = req.params.id; //Permmet de récupérer les paramètre contenus dans l'url
const name = req.params.name;
res.send(`Vous avez demander le pokémon n° : ${id} qui est ${name}`);
});*/
//PATCH : contrairement à PUT où on doit modifié toute une ressource, PATCH nous permet de modifié un élément particulier de cette ressource. Néanmoins, il n'est pas conseiller de l'utilisé pour les API Rest car si deux personnes essaient de modifié le même élément en même temps, il y'aura un gros risque de conflit ce qui fera cracher notre application.
//BACKEND : Serveur (Node JS) + API Rest(Express) + BDD(SQL)
//Paramètre d'URL :
//api/pokemons/:id <- req.params.id
//Paramètre de REQUETE :
//api/pokemons?name=Bulbizzare <- req.query.name
/*********************************LES CODE DE STATUS ERREURS HTTP *******************/
/*
- 1XX : L'information
Communique des informations au niveau du protocole de transfert. Aucune données n'est échanger entre le client et le serveur, on parle de MetaDonnées.
- 2XX : Le Succès(200, 201, ...)
Indique que la requête du client à été accepté et traité avec succès et tous s'est passé correctement.
Il y'a bien eu transfert de la donnée demandé.
-3XX : La Redirection(301, 302, ...)
Indique que le client souhaite accéder à une ressource qui à été déplacé.Il faudra éffectuer une deuxième reqête pour aller chercher les données au bon endroit.
-4XX : Erreur du client(401, 404, ...) de manière gnénérale
Indique que le client s'est planté dans la requête.
Exemple : - 404 la ressource n'existe pas ou plus,
- 401 vous n'ête pas authentifié donc pas autorisé à accéder à cette ressource.
- 403 le client est authentifié et demande à accédé une ressource non autoriser
-5XX : Erruer du serveur(500, 503, ...)
La c'est de la faute du Devéloppeur.Il y'a un problème au niveau du serveur.
*/
//ERREUR TECHNIQUES: qui concerne les catch()
/******************* Les erreurs METIERS : VALIDATEURS ET CONTRAINTES****************************/
//Les règles de VALIDATIONS : Vérifie la conformité des données, bloque la requête en cas de non conformité et génère une Erreur.
/*
- notEmpty <- Pour vérifié que la valeur n'est pas Empty
- notNull <- Pour vérifier que la valeur n'est pas Null
- isInt <- Pour vérifier que c'est bien un entier
- isUrl <- Pour vérifier que c'est bien un URL
- isEmail <- Pour vérifier que c'est bien un Email
- min {args: [valMin], msg: ""} <- Pour définir la valeur minimal d'un Integer
- max {args: [valMax], msg: ""} <- Pour définir la valeur maxima d'un Integer
- len {args:[minChar,maxChar], msg:""} <- Pour définir la longueur min et max d'une chaine de caractère.
- allowNull <- est à la fois un validateur côté JS et d'une contrainte côté SQL
*/
/**/
//Les CONTRAINTES :sont des règles définit au niveau SQL. Donc la requête bonne ou mauvaise est exécuté, puis c'est au niveau du serveur SQL que la demande est rejeter pour que enfin sequilize nous informe ce que s'est passé.
//Validation: Evite une requête inutile - CONTRAINTE: dernière vérification
//Les paramètres d'URL sont utilisés pour identifier des données spécifiques(Toujours en minuscule)
//Les paramètres de requêtes sont utilisés pour trier ou filtrer des ressources
/******LES OPERATEURS SEQUELIZE******/
/*
- Op.eq <- fait une recherche en dur dans
la base de donnée identique à where {{name: name}} = {
name : {
[Op.eq] : name
}
}
- Op.like <- Vérifie si le terme de recherche est contenue dans le nom du pokémon . Attention au %
* ${name}% : recherche une pokémon qui commence par le terme de recherche
* %${name} : recherche une pokémon qui se termine par le terme de recherche
* %${name}% : recherche une pokémon qui commence ou se termine (contient) par le terme de recherche
-limit <- permet de limité le nombre d'éléments retourné par la requête
-findAndCountAll <- permet de retourné le nombre total d'éléments disponibles de la réponse à la requête ainsi qu'un nombre limité de résultats à retourné
-findOne <- permet d'aller cherché un élément grâce à un paramètre fournis dans la requête.
-Order <- Permet de trier une recherche par ordre :
* Croissant: ['name', 'ASC']
* Décroissant: ['name', 'DESC']
* Par défault c'est croissant : ['name']
*/
/*AUTHENTIFICATION : SECURITE DE L'API */
//Il faudra une fonction de hashage
//Il faudra un token(jetton) JWT(JSON WEB TOKEN) : c'est une clé cryptée, avec une durée de validité dans le temps, et qui se présente sous la forme d'une chaîne de caractères.
/*
authorization : Bearer <JWT>
Exemple de syntaxe :
authorization : Bearer jdE98zDdefze82XZDZZD
*/
/*
LES OPTIONS DE LA METHODE SYNC:
- sync() <- crée une table initiale si il y'en à pas, cependant supprime pas la table table existante en case de redémarage ou bien modification de la table (Utilisé en production).
- sync({force: true}) <- crée un table, en supprimant celle qui est existante si elle existe bien sur. Exemple une modification, un redemarrage etc... (Utilsisé en dévéloppement).
- sync({alter:true}) <- vérifie l'état de la table dans la BDD(colonnes, types de données, etc..), puis effectue des modifications nécéssaires de la table pour qu'elle corresponde au model.
*/
/*
LES POLITIQUES DE SECURITES
- SAME ORIGIN : Une page web hébergé sur un serveur ne peut intéragir qu'avec les ressources herberger sur le même serveur. (API REST - IMG - POLICES DE TEXTES - BDD).
- CROSS ORIGIN (CORS) : Cross Origin Ressources Sharing elle nous permet d'effectuer des requêtes en dehors de l'origine de départ.
* QUI : peut accédé (GET, POST )
* Comment : requêtes autorisé (PATCH, DELETE, UPDATE, PUT)
*/