-
Notifications
You must be signed in to change notification settings - Fork 44
/
partie3.md
181 lines (133 loc) · 4.52 KB
/
partie3.md
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
## Tâche 3.
Pour cette tâche, notre objectif est de nous assurer que le transfert
des messages entre le client et le serveur respecte le format JSON et le
protocole de communication.
Modifiez les fichiers *validation.h*, *validation.c* *json.h* et *json.c*.
Références:
1. <http://json.org/json-fr.html>: Site officiel de JSON
2. <https://jsonlint.com/>: JSONLint- The JSON Validator
3. JSON : <https://fr.wikipedia.org/wiki/JavaScript_Object_Notation>
### a. Validation des messages JSON
Sans utiliser les bibliothèques externes, créez un fichier C
*validateur.c* et ajoutez de nouvelles fonctions pour valider les
messages JSON.
Par exemple, les messages suivantes sont valides. Vous voyez que nous
n\'utilisons pas de guillemets pour les nombres, mais nous utilisons des
guillemets pour les chaînes de caractères.
Remarquez que pour les opérations "calcule"/"balises", nous avons maintenant ajouté le nombre de couleurs/tags dans la liste "valeurs".
```
{
"code" : "message",
"valeurs" : [ "bonjour"]
}
{
"code" : "calcule",
"valeurs" : [ "+", 23, 45 ]
}
{
"code" : "couleurs",
"valeurs" : [ 10, "#0effeee", "#0effe23", ...]
}
{
"code" : "balises",
"valeurs" : [ 10, "#nature", "#arbre", ...]
}
```
Mais, la message suivante n\'est pas valide parce que les valeurs
\'message\' et \'bonjour\' ne figurent pas entre les guillemets.
``` {
"code" : message,
"valeurs" : [ bonjour]
}
```
Vous pouvez tester la validité des messages JSON à l\'aide du site en
ligne <https://jsonlint.com>
Modifiez le code client.c et serveur.c et intégrez les nouvelles
fonctions de validation pour que le serveur et le client reçoivent
uniquement des messages JSON valides.
### b. Validation du protocole de communication
Nous avons seulement autorisé quatre opérations. Notre prochain objectif
est de nous assurer que la demande envoyée par le client et la réponse
envoyée par le serveur respectent le protocole et que nous n\'acceptons
aucune autre opération.
Voir les exemples donnés ci-dessous. Votre prochain objectif consiste à
ajouter des fonctions dans le fichier *validateur.c* permettant de
vérifier que chaque opération ne contient que les valeurs autorisées.
#### 1. message
![](./images/client-server-message.svg)
**Exemple de requête envoyé par le client**
``` {
"code" : "message",
"valeurs" : [ "bonjour"]
}
```
**Exemple de réponse envoyé par le serveur**
``` {
"code" : "message",
"valeurs" : [ "bonjour"]
}
```
#### 2. nom
![](./images/client-server-nom.svg)
**Exemple de requête envoyé par le client**
```
{
"code" : "nom",
"valeurs" : [ "neptune"]
}
```
**Exemple de réponse envoyé par le serveur**
```
{
"code" : "nom",
"valeurs" : [ "neptune"]
}
```
**3. calcul**
![](./images/client-server-calcul.svg)
**Exemple de requête envoyé par le client**
```
{
"code" : "calcule",
"valeurs" : [ "+", 23, 45 ]
}
```
**Exemple de réponse envoyé par le serveur**
```
{
"code" : "calcule",
"valeurs" : [ 68 ]
}
```
**4. couleurs**
![](./images/client-server-couleurs.svg)
**Exemple de requête envoyé par le client**
```
{
"code" : "couleurs",
"valeurs" : [ 10, "#0effeee", "#0effe23", ...]
}
```
**Exemple de réponse envoyé par le serveur**
```
{
"code" : "couleurs",
"valeurs" : [ "enregistré"]
}
```
**5. balises**
![](./images/client-server-balises.svg)
**Exemple de requête envoyé par le client**
```
{
"code" : "balises",
"valeurs" : [ 10, "#nature", "#arbre", ...]
}
```
**Exemple de réponse envoyé par le serveur**
```
{
"code" : "balises",
"valeurs" : [ "enregistré"]
}
```