WoW Classes 101 : Un outil pour explorer les classes et spécialisations de World of Warcraft

WoW Classes 101 est un projet démontrant l’utilisation d’une API tierce dans un environnement web. Développé en PHP avec une architecture orientée REST, ce projet exploite les technologies modernes pour récupérer, traiter et afficher les données de World of Warcraft en optimisant les performances grâce à un système de cache que j’ai fait. Son objectif est de démontrer mes compétences en développement web full-stack. Le projet au complet a été fais sans l’utilisation d’aucune librairie externe afin de tester mes compétences et assurer la maintenabilité du code.

Partie Backend

Technologies utilisées

Backend :

PHP : Gestion des DAO, système de cache et endpoints API
OAuth 2.0 : Authentification avec l’API Blizzard
JSON : Format des données renvoyées par l’API

Frontend :

JavaScript : Récupération et affichage des données via requêtes API en AJAX (XMLHttpRequest)
HTML/CSS : Structure et mise en page de l’application

Autres :

API Blizzard : Source des données du jeu
GitHub : Gestion du code et des issues

Fonctionnalités principales

✅ Connexion à l’API Blizzard via OAuth 2.0
✅ Récupération des données des races, classes et spécialisations
✅ Gestion d’un cache en PHP pour optimiser les performances
✅ API REST en PHP exposant les données en JSON
✅ Interface JavaScript affichant les informations en temps réel

Endpoints disponibles

Méthode Endpoint Paramètre Description
GET api/listerClasses.php Liste toutes les classes
GET api/listerRaceParFaction.php ?faction={alliance/horde} Liste les races jouables par faction
GET api/listerSpecialisationParClasse.php ?id={int} Liste les spécialisations de chaque classe
GET api/detaillerClasse.php ?id={int} Donne des informations additionnelles sur les classes
GET api/detaillerRace.php ?id={int} Donne des informations additionnelles sur les races

Code de Cache

Le gestionnaire de cache que j’ai créer est ce qui ma pris le plus de temps à programmer. Étant donnée que je ne voulais pas utilisé de librairie ou de service externe j’ai décidé de faire un système de cache json Static et facilement exportable.
class CacheManager {
    private static string $cacheDir;
    private static int $cacheExpiration;

    public static function init(): void {
        if (!isset(self::$cacheExpiration) || !isset(self::$cacheDir)) {
            self::$cacheExpiration = (int) EnvLoader::get('CACHE_EXPIRATION');
            self::$cacheDir = EnvLoader::get('CACHE_DIR');

            if (!file_exists(self::$cacheDir)) {
                mkdir(self::$cacheDir, 0777, true);
            }
        }
    }

    public static function get(string $key): ?array {
        self::init();

        $filePath = self::$cacheDir . '/' . $key . '.json';
        if (file_exists($filePath)) {
            $content = file_get_contents($filePath);
            $data = json_decode($content, true);

            if (isset($data['timestamp']) && time() - $data['timestamp'] < self::$cacheExpiration) { return $data['data']; } } return null; } public static function set(string $key, array $data): void { self::init(); $filePath = self::$cacheDir . '/' . $key . '.json'; $dataToStore = [ 'timestamp' => time(),
            'data' => $data
        ];
        file_put_contents($filePath, json_encode($dataToStore));
    }

    public static function isCached(string $key): bool {
        self::init();
        return file_exists(self::$cacheDir . '/' . $key . '.json');
    }
}

Partie Frontend

Dans le cadre du développement de mon site web, j’ai choisi d’utiliser Bootstrap pour structurer et styliser l’interface utilisateur. Toutefois, afin de donner une identité unique à mon projet, j’ai personnalisé le thème Bootstrap en modifiant certains styles pour correspondre à l’esthétique que je souhaitais.

Personnalisation de Bootstrap

Bien que Bootstrap fournisse une base solide et responsive, j’ai apporté plusieurs modifications à son apparence pour éviter une sensation de “site générique”. Ces ajustements ont été réalisés via des feuilles de style CSS additionnelles, en redéfinissant certaines variables de Bootstrap et en appliquant des styles personnalisés aux composants clés.

Gestion des pages actives avec PHP

Pour assurer une navigation fluide et intuitive, j’ai utilisé PHP afin de déterminer la page active et d’appliquer dynamiquement la classe active aux éléments du menu. Cette approche permet d’indiquer visuellement à l’utilisateur sur quelle page il se trouve sans nécessiter d’intervention manuelle sur chaque fichier.

Exemple de logique PHP pour gérer l’état actif des liens du menu :

Dynamisme avec JavaScript et DHTML

En complément du rendu côté serveur avec PHP, j’ai intégré JavaScript pour gérer les interactions dynamiques sur la page. Grâce au DHTML (Dynamic HTML), certains éléments du site peuvent être modifiés en temps réel sans nécessiter de rechargement complet de la page.

Quelques exemples d’utilisation du DHTML dans mon projet :

  • Affichage ou masquage d’éléments en fonction des actions de l’utilisateur.
  • Mise à jour dynamique du contenu (comme des détails de classes WoW).

Conclusion

L’association de Bootstrap, PHP et JavaScript permet d’obtenir un site web à la fois structuré, personnalisable et interactif. Grâce à PHP, la gestion des pages actives est automatisée, tandis que JavaScript améliore l’expérience utilisateur en rendant l’interface plus dynamique et réactive. Ce projet illustre ma capacité à combiner ces différentes technologies pour créer un site fonctionnel et esthétiquement abouti.

Leave a Reply

Your email address will not be published. Required fields are marked *