API Produits et utilisateurs d'une coopérative agricole
Présentation de l'API Produits et utilisateurs de la coopérative Anarchy Acres (mars - avril 2025)
Contexte
Dans le cadre d'un projet en R4.01 Architecture logicielle, nous devions réaliser chacun une partie d'un site web selon l'architecture suivante :
J'étais chargé d'implémenter l'API produits et utilisateurs. Le site web portait sur une coopérative agricole qui souhaitait mettre en vente direct ses produits via une plateforme disponible sur Internet.
L'API implémentée est en JakartaEE Glassfish. Elle repose sur une architecture en couches stricte. La Couche Resource (JAX-RS) expose les endpoints REST et délègue les traitements à la Couche Service, qui contient la logique métier. Les données sont persistées via la Couche Repository (JDBC) qui communique avec la base de données MariaDB, en utilisant des entités définies dans la Couche Model (Produit, Type, Unite, Utilisateur).
Implémentation
Appels JSON simple
L'API permet de gérer l'intégralité du catalogue produits via des échanges de flux JSON standards. Voici les principales fonctionnalités implémentées :
| Domaine | Fonctionnalités | Détails techniques |
|---|---|---|
| Consultation | Lecture des données | Récupération des listes de produits, types de produits et unités de mesure, ou récupération par ID unique. |
| Recherche | Filtrage dynamique | Recherche textuelle de produits par leur nom via query parameter. |
| Édition | Création et Modification | Ajout de nouveaux produits/types (POST) et mise à jour des existants (PUT) avec validation des données. |
| Suppression | Nettoyage | Suppression d'entrées en base de données via la méthode DELETE. |
| Enrichissement | Data Mapping | Les objets "Produit" sont automatiquement enrichis avec les objets complets "Type" et "Unite" lors de la sérialisation. |
Déploiement en distant
J'ai déployé mon API sur un VPS afin de disposer d'une entière flexibilité concernant celle-ci. J'ai utilisé un VPS Oracle à cet effet, en le configurant de A à Z.
Pour les besoins de cette mise en ligne, une sécurité a été ajoutée et seuls les appels GET sont utilisables. Veillez à ne pas surutiliser mon API s'il vous plaît !
Renvoi d'images
Permis par le déploiement en distant, la gestion des images ne passe pas par la base de données (stockage sous forme de BLOB) mais par le système de fichiers du serveur pour optimiser les performances.
- Réception : Le contrôleur
ImageResourceintercepte la requête GET ciblant l'ID d'un produit. - Métadonnées : Le service interroge d'abord la base de données pour valider l'existence du produit et récupérer son nom normalisé.
- Résolution : Le système construit le chemin du fichier sur le disque du VPS (ex:
/var/coop-images/ID_NOM.jpg). - Fallback : Si le fichier spécifique est introuvable, le service tente de servir une image générique par défaut avant de renvoyer une erreur.
- Streaming : Le fichier binaire est renvoyé avec le MIME type approprié (ex:
image/jpeg).
Tableau d'appels possibles
Voici la liste exhaustive des endpoints exposés par l'API sur le serveur de production.
| Méthode | URL Complète | Description | Retour attendu |
|---|---|---|---|
GET | https://79.72.25.28:8080/api/produits | Liste tous les produits | JSON Array (Produits) |
GET | https://79.72.25.28:8080/api/produits/{id} | Détail d'un produit spécifique | JSON Object (Produit) |
GET | https://79.72.25.28:8080/api/produits/search?nom={x} | Recherche par nom | JSON Array (Produits) |
GET | https://79.72.25.28:8080/api/types | Liste tous les types (catégories) | JSON Array (Types) |
GET | https://79.72.25.28:8080/api/types/{id} | Détail d'un type | JSON Object (Type) |
GET | https://79.72.25.28:8080/api/unites | Liste toutes les unités de mesure | JSON Array (Unités) |
GET | https://79.72.25.28:8080/api/images/produit/{id} | Télécharge l'image du produit | Binary (Image/JPEG) |
POST | https://79.72.25.28:8080/api/produits | Ajout d'un produit (Body JSON) | 201 Created |
PUT | https://79.72.25.28:8080/api/produits/{id} | Modification d'un produit | 200 OK |
DELETE | https://79.72.25.28:8080/api/produits/{id} | Suppression d'un produit | 204 No Content |
POST | https://79.72.25.28:8080/api/images/produit/{id} | Upload d'une image (Binaire) | 200 OK / 201 Created |
Exemples d'appels GET
Voici une liste d'URL directes pour tester les endpoints de lecture disponibles sur le serveur de production :
Produits
-
Récupérer la liste complète :
-
Récupérer un produit spécifique (ex: ID 1) :
-
Rechercher un produit par nom (ex: "Tomate") :
-
Afficher les infos de debug d'un produit :
Types (Catégories)
-
Récupérer tous les types :
-
Récupérer un type spécifique :
Unités de mesure
-
Récupérer toutes les unités :
-
Récupérer l'unité 1 :
Images
-
Afficher/Télécharger l'image d'un produit (rendu direct dans le navigateur) :
Galerie





Page d'accueil du site






