Aller au contenu

Exercice 03 - HelloWorldApi

Créez un nouveau projet dans lequel vous allez coder votre premier API en Node.js à l'aide d'Express.

Installation des modules

  • Pour cet exercice utilisez les modules suivants : Express et Nodemon
  • Créez ensuite un fichier index.js et utilisez le code donné en exemple dans les notes de cours d'un petit serveur web avec Express.
  • Utilisez l'intergiciel express.json() dans votre fichier index.js pour convertir les données JSON en objet JavaScript.

Structure de l'application

Respectez la structure d'application tel que décrite dans les notes de cours. (Créez uniquement les fichiers nécessaires)

  • index.js : La porte d'entrée de votre api
  • salutations.route.js : Les routes associées avec les salutations
  • salutations.controller.js : La logique de votre code pour accéder ou modifier les informations des salutations.
  • salutations.model.js : Les données de salutations

Simulation des données

On va simuler l'accès à la base de données avec le tableau d'objets suivant. Créez le fichier salutations.model.js dans votre projet et copiez le code suivant:

salutations.model.js
const salutations = [
    { code_langue : "fr", langue : "Français", message : "Bonjour le monde"},
    { code_langue : "fr", langue : "Français", message : "Bon matin"},
    { code_langue : "fr", langue : "Français", message : "Salut"},
    { code_langue : "fr", langue : "Français", message : "Bonne nuit je vais travailler"},
    { code_langue : "en", langue : "Anglais", message : "Hello world"},
    { code_langue : "en", langue : "Anglais", message : "Good morning"},
    { code_langue : "en", langue : "Anglais", message : "Hi"},
    { code_langue : "en", langue : "Anglais", message : "Good night, i''m going to work"},
    { code_langue : "es", langue : "Espagnol", message : "Hola Mundo"},
    { code_langue : "es", langue : "Espagnol", message : "Buenos dias"},
    { code_langue : "es", langue : "Espagnol", message : "Hola"},
    { code_langue : "es", langue : "Espagnol", message : "Buenas noches me voy a trabajar"},
    { code_langue : "de", langue : "Allemand", message : "Hallo Welt"},
    { code_langue : "de", langue : "Allemand", message : "guten Morgen"},
    { code_langue : "de", langue : "Allemand", message : "Hallo"},
    { code_langue : "de", langue : "Allemand", message : "Gute Nacht, ich gehe zur Arbei"}
];

export { 
    salutations
};

Ensuite pour utiliser votre tableau vous pouvez faire import { salutations, AjouterSalutation } from '../salutations.model.js'; dans un autre fichier (ajuster le chemin au besoin).

Postman

Dans le logiciel Postman, créz un répertoire pour l'exercice et enregistrez une requête pour chacune des routes que vous allez créer.

ex03.png

Une bonne habitude à prendre

Routage

Votre api comportera les routes suivante:

Méthode Route Description
GET /api Message de bienvenue à l'api
GET /api/salutations/liste Afficher la liste de toutes les salutations
GET /api/salutations?langue=[fr,en,es,de] Afficher une salutation aléatoire. Si le paramètre est ajouté et valide, la salutation sera dans la langue choisie
POST /api/salutations Ajouter une salutation (voir aide plus bas)
  • Vous devez utiliser l'objet Router pour regrouper toutes les routes "salutations" dans un même fichier: salutations.route.js.

GET /api

  • Vous pouvez conservez l'exemple présent dans les notes de cours dans le fichier index.js

GET /api/salutations/liste

  • Retournez simplement la liste de toutes les salutations au format JSON

GET /api/salutations?langue=[fr,en,es,de]

  • Retournez une salutations aléatoire depuis le tableau au format JSON
  • Si un code de langue est fourni, sélectionnez la salutation parmi celles de cette langue
  • Si le code n'existe pas, si aucune salutation ne correspond à ce code, retournez le message suivant au format JSON avec le code de statut 404. Remplacez la valeur de code par celle envoyée en paramêtre.
{
    "message" : "Erreur, le code de langue [code] n'existe pas"
}

Aide

Avec Express, pour accéder aux paramètres de la section requête de l'url on peut utiliser req.query.nomParam. Pour tester si le paramètre existe, on peut faire le test avec un simple if comme ceci if(req.query.langue) {}

salutations.controller.js
// Exemple de récupération du paramêtre langue
if(req.query.langue) {
    console.log(req.query.langue);
} else {
    console.log("Le paramètre langue est manquant");
} 

J'ai utilisé array.filter() pour ne conserver que les salutations qui correspondent au code de la langue.

POST /api/salutations

  • Vous devez dans le corps de la requête envoyer les informations suivantes en JSON (utilisez Postman le faire) :
corps
1
2
3
4
5
{ 
    "code_langue" : "fr", 
    "langue" : "Français", 
    "message" : "Votre nouveau message"
}
  • Si vous utilisez l'intergiciel express.json() vous avez accès aux données par l'objet req. Il ne vous reste ensuite qu'à ajouter les valeurs au tableau salutations.
index.js
app.post('/', (req, res) => {
    const message = req.body.message; // Il y a un item message dans le json envoyé
    ...
    if(!req.body.message) {
        console.log("Le paramètre message est absent");
    }
    ...
});
  • Créez une fonction dans le fichier salutations.model.js qui va s'occuper d'ajouter dans le tableau le nouvel objet salutation.
  • Dans le fichier salutations.controller.js validez que toutes les informations sont présente, sinon retournez le message suivant au format JSON avec le code d'erreur 400.
{
    "message" : "Erreur, les paramètres code_langue, langue et message sont obligatoires"
}
  • Un fois l'ajour effectué, retournez le message suivant en JSON. ([message] représente la valeur du paramêtre message)
{
    "message" : "Salutation ajoutée",
    "salutation" : [message]
}

Intergiciel

À l'aide de l'intergiciel Morgan ajoutez dans un fichier nommé access.log une entrée à chaque fois qu'on accède à une route du serveur. Cette entrée devra afficher la date au format clf, la méthode http, la route, le status de la réponse et le temps de réponse en millisecondes. Le résultat doit être formaté comme ceci:

access.log
22/Jan/2024:15:07:15 +0000 => GET / 200 - 7.331 ms

Consultez les notes de cours sur les intergiciels et la documentation de Mogan pour vous aider.