Skip to content

Commit 2c0c99a

Browse files
committed
fix: tp6
1 parent 2fd4401 commit 2c0c99a

1 file changed

Lines changed: 14 additions & 22 deletions

File tree

TP/TP6/README.md

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@
33
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/>
44
Il s'agit d'abord de la réalisation d'une API serveur REST puis d'un client :
55

6-
- **Partie 1** : prendre en main le projet, _tag_ `reponses`.
6+
- **Partie 1** : initialiser le projet.
77
- **Partie 2** : compléter les fonctionnalités manquantes de l'API v1, _tag_ `api-v1`.
88
- **Partie 3** : ajouter un HTML côté serveur et négocier les contenus, _tag_ `api-v2`.
99
- **Partie 4** : faire un client AJAX qui utilise l'API v2, _tag_ `client-ajax`.
1010
- **Partie 5** : fonctionnalité de suppression avec authentification, _tag_ `api-v2-delete`.
1111

12-
Un projet d'application est disponible sur Github <https://github.com>.
13-
1412
## Introduction
1513

1614
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
2624

2725
### Installation
2826

29-
Créer votre dépot sur GitHub puis cloner votre projet.
27+
Créer votre dépot sur GitHub.
3028

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).
3432

3533
Avant de démarrer, **créer un fichier nommé `.env` à la racine du projet** avec le contenu comme suit, à adapter à votre environnement si besoin.
3634
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
8078

8179
### Modalités de rendu
8280

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.
8482

8583
À chaque partie complétée, il faut associer un _tag_ GIT.
8684
Penser également **à compléter le fichier** `README.md` avec votre état d'avancement.
8785

8886
#### critères d'évaluation
8987

9088
- /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
9290
- /3 **qualité du code**
9391
- choix des identifiants, mise en forme, respect des conventions
9492
- gestion des erreurs, notamment `async/await` et codes retours HTTP associés
9593
- granularité et qualité des message de commits, fichier `README.md`
9694
- /1 **ergonomie et rendu des clients**
9795
- il faut que ce soit utilisable et sobre
9896

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.
10098

10199
**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`.
102100
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
105103

106104
Répondre aux questions précédentes dans le fichier `REPONSES.md` de votre dépôt.
107105

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.
109106
- 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.
111107
- 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.
112108
- Donner le script `npm` qui permet de formatter automatiquement tous les fichiers `.mjs`
113109
- Les réponses HTTP contiennent une en-tête `X-Powered-By`. Donner la configuration Express à modifier pour qu'elle n'apparaisse plus.
114110
- Créer un nouveau `middleware` (niveau application) qui ajoute un header `X-API-version` avec la version de l'application. Donner le code.
115111
- Trouver un middleware Express qui permet de répondre aux requêtes `favicon.ico` avec `static/logo_univ_16.png`. Donner le code.
116112
- Donner les liens vers la documentation du driver SQLite utilisé dans l'application.
117113
- 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.
119115
- 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
124116

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.
126118
Mettre le _tag_ `reponses` à la version correspondant dans votre dépôt Git.
127119

128120
## Partie 2 : compléter l'application
129121

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.
131123

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`.
134126
- Ajouter la fonctionnalité qui permet de compter le nombre de fois où chaque lien est visité.
135127
- Pour cela, incrémenter l'attribut `visit` de la base de données à chaque visite sur `GET /:url`.
136128
- La gestion des variables d'environnement et du niveau de logging est dupliquée entre plusieurs fichiers.
137129
- La factoriser dans un fichier `config.mjs` qui sera chargé par les autres.
138130

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**
140132

141133
Réaliser ces fonctionnalités et les pousser dans le dépôt.
142134
Mettre le _tag_ `api-v1` à la version correspondant dans votre dépôt Git.

0 commit comments

Comments
 (0)