Skip to content

Amine830/Demo-hypermedia

Repository files navigation

🍕 Démonstration REST vs HATEOAS

Netlify Status Node.js License: MIT JavaScript

Une démonstration pédagogique et visuelle pour comprendre la différence entre une API REST traditionnelle et une API REST avec HATEOAS à travers un exemple concret de commande de pizza.

📖 Table des matières

🎯 Objectif

Ce projet illustre concrètement les différences conceptuelles et pratiques entre :

  1. API REST Classique 🔗 - Endpoints fixes, URLs codées en dur
  2. API REST HATEOAS 🌐 - Hypermedia As The Engine Of Application State, découverte dynamique

Note : Cette démonstration est parfaite pour comprendre le niveau 3 du Richardson Maturity Model

🌟 Aperçu

Problème résolu

Comment créer des APIs REST robustes et évolutives ? Cette démo montre pourquoi HATEOAS peut être la solution au couplage fort entre clients et serveurs.

Approches comparées

🔗 REST Classique 🌐 REST HATEOAS
URLs codées en dur Découverte dynamique des liens
Documentation externe Auto-documentation
Couplage fort Couplage faible
Fragile aux changements Robuste aux évolutions

📁 Structure du projet

demo/
├── pizza-rest/         # API REST traditionnelle
│   ├── package.json
│   └── index.js
├── pizza-hateoas/      # API REST avec HATEOAS
│   ├── package.json
│   └── index.js
├── client-rest/        # Client pour l'API REST traditionnelle
│   ├── index.html
│   ├── styles.css
│   └── app.js
├── client-hateoas/     # Client pour l'API REST avec HATEOAS
│   ├── index.html
│   ├── styles.css
│   └── app.js
├── start-servers.sh        # Script de démarrage automatique
├── DEMO_GUIDE.md          # Guide détaillé de démonstration
├── README.md              # Ce fichier
├── LICENSE                # Licence MIT
├── .gitignore            # Fichiers à ignorer par Git
└── index.html            # Page d'accueil comparative

🚀 Installation

Prérequis

  • Node.js v16 ou supérieur
  • npm (inclus avec Node.js)
  • Un navigateur web moderne

Étapes d'installation

  1. Cloner le repository

    git clone https://github.com/Amine830/Demo-hypermedia.git
    cd Demo-hypermedia
  2. Installer les dépendances

    # Pour l'API REST classique
    cd pizza-rest
    npm install
    cd ..
    
    # Pour l'API REST HATEOAS
    cd pizza-hateoas
    npm install
    cd ..

💻 Utilisation

Méthode rapide avec le script

# Démarrer les deux serveurs automatiquement
./start-servers.sh

Méthode manuelle

  1. Démarrer l'API REST classique (Terminal 1)

    cd pizza-rest
    npm start

    ➡️ Serveur disponible sur http://localhost:3000

  2. Démarrer l'API REST HATEOAS (Terminal 2)

    cd pizza-hateoas
    npm start

    ➡️ Serveur disponible sur http://localhost:3001

  3. Ouvrir la démonstration

    Ouvrez index.html dans votre navigateur ou accédez directement aux clients :

Version de production

Les serveurs sont également déployés en ligne :

🎯 Configuration automatique : Le projet détecte automatiquement l'environnement (local/production) et utilise les bonnes URLs d'API grâce au fichier config.js.

✨ Fonctionnalités

API REST Classique

  • Endpoints fixes prédéfinis
  • URLs codées en dur dans le client
  • Réponses contenant uniquement les données demandées

API REST avec HATEOAS

  • Point d'entrée unique avec découverte progressive des URLs
  • Navigation dynamique via les liens dans les réponses
  • Auto-documentation via les hyperliens
  • Adaptation du client aux actions disponibles

🎬 Guide de démonstration

Pour une démonstration complète et détaillée, consultez le Guide de démonstration qui contient :

  • 📋 Scripts de présentation étape par étape
  • 🎯 Points clés à expliquer
  • 💡 Exemples concrets et comparaisons
  • 🧪 Tests de robustesse en temps réel
  • ❓ Questions fréquemment posées
  • 🎨 Conseils pour une présentation efficace

📸 Démonstration en images

Page d'accueil

Comparaison des approches

les autres images sont disponibles dans le dossier assets/screenshots/.

🔧 Comparaison technique

Cas d'utilisation : Commander une pizza

Les deux APIs permettent de :

  1. Consulter le menu des pizzas disponibles
  2. Commander une pizza
  3. Suivre l'état de la commande
  4. Annuler une commande

Tableau comparatif des réponses

Endpoint REST Classique REST HATEOAS
Menu [{"id":1,"name":"Margherita","price":8},...] {"pizzas":[...],"links":[{"rel":"self","href":"/menu"},{"rel":"order","href":"/order"}]}
Commande {"orderId":"abc123","status":"pending"} {"order":{...},"links":[{"rel":"track","href":"/track/abc123"},{"rel":"cancel","href":"/order/abc123/cancel"}]}
Suivi {"orderId":"abc123","status":"baking"} {"order":{...},"links":[{"rel":"self","href":"/track/abc123"},{"rel":"cancel","href":"/order/abc123/cancel"}]}

Points pédagogiques illustrés

  1. 🔗 Couplage : HATEOAS réduit le couplage entre client et serveur
  2. 🚀 Évolutivité : Les APIs HATEOAS évoluent sans casser les clients
  3. 🔍 Découvrabilité : Les clients découvrent les fonctionnalités dynamiquement
  4. 🎮 Contrôle : Le serveur contrôle les actions disponibles selon le contexte

Test de robustesse

Pour tester la robustesse de HATEOAS :

  1. Changez les URLs de /v1/ vers /v2/ dans le serveur HATEOAS
  2. Mettez à jour seulement le point d'entrée dans le client HATEOAS
  3. Observez que le client HATEOAS continue de fonctionner ✅
  4. Le client REST classique sera cassé ❌

🤝 Contribution

Les contributions sont les bienvenues ! Pour contribuer :

  1. Fork le repository
  2. Créez une branche pour votre feature (git checkout -b feature/AmazingFeature)
  3. Committez vos changements (git commit -m 'Add some AmazingFeature')
  4. Push sur la branche (git push origin feature/AmazingFeature)
  5. Ouvrez une Pull Request

Standards de développement

  • Code JavaScript ES6+
  • Tests unitaires souhaités
  • Respect des principes REST et HATEOAS

📚 Ressources

Documentation officielle

Articles et tutoriels

🐛 Signalement de bugs

Vous avez trouvé un bug ? Ouvrez une issue avec :

  • Description du problème
  • Étapes pour reproduire
  • Comportement attendu vs observé
  • Screenshots si pertinents

📝 Licence

Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.

👥 Auteurs

  • Amine NEDJAR - Création initiale - @Amine830

🙏 Remerciements


N'hésitez pas à mettre une étoile si ce projet vous a aidé !

📚 Projet créé à des fins pédagogiques pour illustrer les principes des systèmes hypermédias.

About

An educational and visual demonstration to understand the difference between a traditional REST API and a REST API with HATEOAS, using a pizza ordering example

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors