You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: TP/TP6/README.md
+14-22Lines changed: 14 additions & 22 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,14 +3,12 @@
3
3
Ce projet consiste à réaliser un service simple de [réduction d'URL](https://en.wikipedia.org/wiki/URL_shortening) comme <https://bit.ly/> ou <https://tinyurl.com/>
4
4
Il s'agit d'abord de la réalisation d'une API serveur REST puis d'un client :
5
5
6
-
-**Partie 1** : prendre en main le projet, _tag_`reponses`.
6
+
-**Partie 1** : initialiser le projet.
7
7
-**Partie 2** : compléter les fonctionnalités manquantes de l'API v1, _tag_`api-v1`.
8
8
-**Partie 3** : ajouter un HTML côté serveur et négocier les contenus, _tag_`api-v2`.
9
9
-**Partie 4** : faire un client AJAX qui utilise l'API v2, _tag_`client-ajax`.
10
10
-**Partie 5** : fonctionnalité de suppression avec authentification, _tag_`api-v2-delete`.
11
11
12
-
Un projet d'application est disponible sur Github <https://github.com>.
13
-
14
12
## Introduction
15
13
16
14
Le service à réaliser permet de transformer une URL longue, comme <https://nodejs.org/api/http.html#event-connect_1> en une URL courte <http://localhost/WmFJQp> qui redirige vers l'URL d'origine quand on se rend dessus.
@@ -26,11 +24,11 @@ La route suivante en revanche, ne répond pas de JSON mais **redirige** le navig
26
24
27
25
### Installation
28
26
29
-
Créer votre dépot sur GitHub puis cloner votre projet.
27
+
Créer votre dépot sur GitHub.
30
28
31
-
Vous disposez d'un projet de départ fonctionnel où les routes `GET /` et `POST /` de l'API V1 sont **déjà** implémentées.
32
-
Une route `GET /error` qui génère une erreur 500 est aussi créée pour les tests.
33
-
En revanche, les routes `GET /:url` et `GET /status/:url` ne sont **pas** implémentées et renvoient pour l'instant une [erreur 501](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501).
29
+
Dans votre projet, il faudra implémenter les routes `GET /` et `POST /` de l'API V1.
30
+
Une route `GET /error` qui génère une erreur 500 devra être créée pour les tests.
31
+
les routes `GET /:url` et `GET /status/:url` ne sont **pas** implémentées et renvoient pour l'instant une [erreur 501](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501).
34
32
35
33
Avant de démarrer, **créer un fichier nommé `.env` à la racine du projet** avec le contenu comme suit, à adapter à votre environnement si besoin.
36
34
Ce fichier `.env` est automatiquement chargé par l'application pour définir les variables d'environnement nécessaires à l'exécution de l'application.
@@ -80,23 +78,23 @@ Le middleware [Swagger UI Express](https://www.npmjs.com/package/swagger-ui-expr
80
78
81
79
### Modalités de rendu
82
80
83
-
Le projet est à rendre sur Github <https://github.com> et sur Render <https://render.com>
81
+
Le projet est à rendre sur Github <https://github.com> et sur Render <https://render.com> ou autre service du même style.
84
82
85
83
À chaque partie complétée, il faut associer un _tag_ GIT.
86
84
Penser également **à compléter le fichier**`README.md` avec votre état d'avancement.
87
85
88
86
#### critères d'évaluation
89
87
90
88
- /16 **fonctionnalités réalisées**
91
-
-voir la liste dans le `README.md` du projet de départ
89
+
-réduction d'URL, rédirection d'URL
92
90
- /3 **qualité du code**
93
91
- choix des identifiants, mise en forme, respect des conventions
94
92
- gestion des erreurs, notamment `async/await` et codes retours HTTP associés
95
93
- granularité et qualité des message de commits, fichier `README.md`
96
94
- /1 **ergonomie et rendu des clients**
97
95
- il faut que ce soit utilisable et sobre
98
96
99
-
L'évaluation des fonctionnalités sera en partie automatisée, il faut donc respecter **srupuleusement** les schéma des réponses JSON demandés.
97
+
L'évaluation des fonctionnalités sera en partie automatisée, il faut donc respecter **scrupuleusement** les schéma des réponses JSON demandés.
100
98
101
99
**NOTA BENE** Pour ajouter un _tag_, utiliser [la fonctionnalité de VSCode](https://stackoverflow.com/questions/41438075/tag-commit-in-vscode), l'interface Web de GitHub ou [la commande `git`](https://stackoverflow.com/questions/5195859/how-do-you-push-a-tag-to-a-remote-repository-using-git) comme `git tag mon-tag main` et `git push origin mon-tag`.
102
100
Dans tous les cas **pensez à pousser les tags sur le dépôt GitHub**, les tags ne sont transmis qu'avec un _push_ spécifique.
@@ -105,38 +103,32 @@ Dans tous les cas **pensez à pousser les tags sur le dépôt GitHub**, les tags
105
103
106
104
Répondre aux questions précédentes dans le fichier `REPONSES.md` de votre dépôt.
107
105
108
-
- Sur <http://localhost:8080/api-docs>, lister les routes qui sont **déjà** implémentées et celles qui ne le sont pas encore.
109
106
- Donner la commande `httpie` correspondant à la commande `curl`[donnée par la doc](http://localhost:8080/api-docs/#/shortener/post_) pour la route `POST`.
110
-
- Donner le _secret_ de la route qui est implémenté mais qui n'est pas documentée.
111
107
- Démarrer l'application en mode _production_ avec `npm run prod` puis en mode _développement_ avec `npm run dev`. Donner les principales différences entre les deux modes.
112
108
- Donner le script `npm` qui permet de formatter automatiquement tous les fichiers `.mjs`
113
109
- Les réponses HTTP contiennent une en-tête `X-Powered-By`. Donner la configuration Express à modifier pour qu'elle n'apparaisse plus.
114
110
- Créer un nouveau `middleware` (niveau application) qui ajoute un header `X-API-version` avec la version de l'application. Donner le code.
115
111
- Trouver un middleware Express qui permet de répondre aux requêtes `favicon.ico` avec `static/logo_univ_16.png`. Donner le code.
116
112
- Donner les liens vers la documentation du driver SQLite utilisé dans l'application.
117
113
- Indiquer à quels moments la connexion à la base de données est ouverte est quand elle est fermée.
118
-
- Avec un navigateur **en mode privé** visiter une première fois <http://localhost:8080/>, puis une deuxième. Ensuite rechargez avec `Ctrl+Shift+R`. Conlure sur la gestion du cache par Express.
114
+
- Avec un navigateur **en mode privé** visiter une première fois <http://localhost:8080/>, puis une deuxième. Ensuite rechargez avec `Ctrl+Shift+R`. Conclure sur la gestion du cache par Express.
119
115
- Ouvrir deux instances de l'application, une sur le port 8080 avec `npm run dev` et une autre sur le port 8081 avec la commande `cross-env PORT=8081 NODE_ENV=development npx nodemon server.mjs`. Créer un lien sur la première instance <http://localhost:8080/> et ensuite un autre sur la seconde instante <http://localhost:8081/>. Les liens de l'un doivent être visibles avec l'autre. Expliquer pourquoi.
120
-
- Si on enregistre 1000 liens par heure, au bout de combien de temps aura t'on 1% de chance d'avoir une collision, c'est-à-dire deux liens différents avec le même raccourci ? Utiliser pour cela <https://zelark.github.io/nano-id-cc/>
121
-
- Pour chacune des fonctions présentes dans `database/database.mjs`, indiquer quelle fonction l'utilise dans le code du routeur.
122
-
- La route `/error` fait planter le serveur au lieu de provoquer une erreur 500 attendue. Trouver quel est le handler qui fait crasher le serveur et expliquer pourquoi.
123
-
- Corriger le point précédent pour que le comportement soit conforme à la documentation. Donner le code
124
116
125
-
Pousser le fichier `REPONSES.md` dans votre dépôt pour le **jeudi 1er septembre 23h59**.
117
+
Pousser le fichier `REPONSES.md` dans votre dépôt.
126
118
Mettre le _tag_`reponses` à la version correspondant dans votre dépôt Git.
127
119
128
120
## Partie 2 : compléter l'application
129
121
130
-
Dans cette partie, il n'y a pas encore de _front-end_, il s'agit **uniquement** d'un_back-end_ qui va recevoir des requêtes HTTP `GET` ou `POST` et répondre des contenus JSON ou rediriger sans aucune CSS ni HTML.
122
+
Dans cette partie, il n'y a pas encore de _front-end_, ni de_back-end_ qui va recevoir des requêtes HTTP `GET` ou `POST` et répondre des contenus JSON ou rediriger sans aucune CSS ni HTML.
131
123
132
-
- Créer les routes manquantes de l'API v1 qui ne sont pas encore implémentées et répondent actuellement un code HTTP 501.
133
-
- Pour celà, compléter les fichiers `router/api-v1.mjs` et `database/database.mjs`.
124
+
- Créer les routes manquantes de l'API v1.
125
+
- Pour celà, créer et compléter les fichiers `router/api-v1.mjs` et `database/database.mjs`.
134
126
- Ajouter la fonctionnalité qui permet de compter le nombre de fois où chaque lien est visité.
135
127
- Pour cela, incrémenter l'attribut `visit` de la base de données à chaque visite sur `GET /:url`.
136
128
- La gestion des variables d'environnement et du niveau de logging est dupliquée entre plusieurs fichiers.
137
129
- La factoriser dans un fichier `config.mjs` qui sera chargé par les autres.
138
130
139
-
**NOTA BENE** il faut _respecter les spécifications fournies_ pour ces fonctionnalités, dont notamment _la structure des objets JSON des réponses_.
131
+
**NOTA BENE**
140
132
141
133
Réaliser ces fonctionnalités et les pousser dans le dépôt.
142
134
Mettre le _tag_`api-v1` à la version correspondant dans votre dépôt Git.
0 commit comments