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.
- 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.
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.
- Node.js
- Express
- JavaScript
- Swagger / OpenAPI
- CSV
- API REST
node:test
Prérequis :
- Node.js
- npm
Installer les dépendances :
npm installLancement standard :
npm startMode développement avec rechargement automatique :
npm run devL'API est disponible par défaut sur :
http://localhost:3000
La documentation Swagger est accessible sur :
http://localhost:3000/api-docs
| 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 |
{
"ville": "Nantes",
"date": "2024-02-01",
"temperatureMin": 2,
"temperatureMax": 8,
"description": "Nuageux",
"humidite": 70
}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 Requestlorsqu'un identifiant ou des données sont invalides ;404 Not Foundlorsqu'un identifiant valide ne correspond à aucun relevé.
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.
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 testLe dossier weather-cli contient un client CLI indépendant qui communique avec l'API via HTTP.
Lancer d'abord l'API :
npm startPuis, dans un autre terminal :
cd weather-cliExemples de commandes :
node cli.js releves
node cli.js releves 5
node cli.js villes
node cli.js villes Paris
node cli.js statsLe CLI utilise la variable d'environnement API_URL lorsqu'elle est définie. Sinon, il utilise par défaut :
http://localhost:3000
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