Skip to content

Latest commit

 

History

39 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MétéoAPI

API REST de gestion de relevés météo développée en Node.js et Express.

Le projet permet de consulter, créer, modifier et supprimer des relevés météo, d'obtenir des statistiques par ville et des statistiques globales.

Les données sont stockées dans un fichier CSV, chargées en mémoire au démarrage de l'application puis réécrites lors des modifications.

Projet réalisé en binôme dans le cadre de la formation Concepteur Développeur d'Applications, avec un développement effectué principalement en pair programming.

Fonctionnalités

  • consultation de l'ensemble des relevés météo ;
  • recherche d'un relevé par identifiant ;
  • création, modification et suppression de relevés ;
  • consultation des villes présentes dans les données ;
  • calcul d'agrégats pour une ville ;
  • statistiques météorologiques globales ;
  • validation des données avant enregistrement ;
  • validation des identifiants transmis dans les routes ;
  • gestion centralisée des erreurs ;
  • journalisation des requêtes HTTP ;
  • documentation interactive avec Swagger / OpenAPI ;
  • client en ligne de commande pour interroger l'API.

Architecture

L'application suit une architecture en couches :

routes
   ↓
controllers
   ↓
services
   ↓
repositories
   ↓
models
  • Routes : définition des endpoints HTTP et documentation OpenAPI.
  • Controllers : gestion des requêtes et des réponses HTTP.
  • Services : logique métier de l'application.
  • Repositories : accès et persistance des données.
  • Models : représentation et validation des relevés météo.

Technologies

  • Node.js
  • Express
  • JavaScript
  • Swagger / OpenAPI
  • CSV
  • API REST
  • node:test

Installation

Prérequis :

  • Node.js
  • npm

Installer les dépendances :

npm install

Lancement

Lancement standard :

npm start

Mode développement avec rechargement automatique :

npm run dev

L'API est disponible par défaut sur :

http://localhost:3000

La documentation Swagger est accessible sur :

http://localhost:3000/api-docs

Endpoints

Méthode Endpoint Description
GET /releves Liste tous les relevés
GET /releves/:id Retourne un relevé par identifiant
POST /releves Crée un relevé
PUT /releves/:id Modifie un relevé
DELETE /releves/:id Supprime un relevé
GET /villes Liste les villes présentes dans les relevés
GET /villes/:ville Retourne les agrégats d'une ville
GET /stats Retourne les statistiques globales
GET /healthcheck Vérifie que le serveur répond

Exemple de relevé

{
  "ville": "Nantes",
  "date": "2024-02-01",
  "temperatureMin": 2,
  "temperatureMax": 8,
  "description": "Nuageux",
  "humidite": 70
}

Validation des données

Un relevé est contrôlé avant son enregistrement.

Les principales règles appliquées sont :

  • ville obligatoire ;
  • description obligatoire ;
  • date au format YYYY-MM-DD ;
  • températures numériques ;
  • température minimale inférieure ou égale à la température maximale ;
  • humidité comprise entre 0 et 100.

Les identifiants utilisés dans les routes /releves/:id doivent également être des entiers strictement positifs.

L'API distingue ainsi notamment :

  • 400 Bad Request lorsqu'un identifiant ou des données sont invalides ;
  • 404 Not Found lorsqu'un identifiant valide ne correspond à aucun relevé.

Persistance des données

Les relevés sont stockés dans :

donnees/meteo.csv

Format du fichier :

ville;date;temperature_min;temperature_max;description;humidite

Les données sont chargées en mémoire au démarrage de l'application. Lors d'une modification, le repository met à jour les données puis réécrit le fichier CSV.

Les identifiants des relevés sont générés par le repository lors de la lecture des données.

Tests

Le projet contient 12 tests automatisés utilisant le module de test natif de Node.js.

Ils couvrent notamment :

  • la validation d'un relevé correct ;
  • les champs obligatoires ;
  • le format de la date ;
  • la cohérence entre température minimale et maximale ;
  • les bornes de l'humidité ;
  • la validation des identifiants de routes.

Lancer les tests :

npm test

Client en ligne de commande

Le dossier weather-cli contient un client CLI indépendant qui communique avec l'API via HTTP.

Lancer d'abord l'API :

npm start

Puis, dans un autre terminal :

cd weather-cli

Exemples de commandes :

node cli.js releves
node cli.js releves 5
node cli.js villes
node cli.js villes Paris
node cli.js stats

Le CLI utilise la variable d'environnement API_URL lorsqu'elle est définie. Sinon, il utilise par défaut :

http://localhost:3000

Structure du projet

weather-api/
├── donnees/
│   └── meteo.csv
├── middleware/
│   ├── logger.js
│   └── erreur.js
├── src/
│   ├── app.js
│   ├── server.js
│   ├── config.js
│   ├── controllers/
│   ├── models/
│   ├── repositories/
│   ├── routes/
│   ├── services/
│   └── utils/
├── weather-cli/
├── package.json
└── README.md

About

API REST météo en Node.js/Express avec persistance CSV, Swagger, CLI et tests automatisés.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages