Pilier 03

Backend
& Données

Ce que l'utilisateur ne voit jamais, et qui doit pourtant tenir.

Pourquoi

La route qui refuse la requête, la contrainte d'intégrité qui empêche l'incohérence, le jeton qui expire au bon moment. J'ai livré une API qui sert plus de 500 utilisateurs — et c'est en production qu'on apprend ce qu'un cours ne montre pas.


En production

Microservice REST sécurisé

Du code que j'ai écrit, exécuté chaque jour par de vrais utilisateurs.

Node.jsJWTRBAC Tests500+ utilisateurs

EtudiantProConnect — stage d'ingénieure back-end, mai à août 2026.

  • 500+ utilisateurs actifs
  • 17 tests
  • 87 % de couverture
  • 6 routes exposées
L'étude de cas

Mis en place

  • Jeton JWT signé, durée de vie courte
  • Contrôle d'accès au niveau de la route
  • Validation typée de toutes les entrées
  • Requêtes paramétrées partout
  • Tests unitaires et d'intégration, Jest et Supertest

Le raisonnement

Je pars du principe qu'un attaquant appelle mes routes directement, sans jamais passer par l'interface. Toute décision d'autorisation vit côté serveur.

Ce que je referais

Aucune révocation prévue : un jeton compromis restait valide jusqu'à expiration. J'ajouterais une liste de révocation et des jetons de rafraîchissement.

Voir aussi

Code propriétaire — présentation détaillée possible en entretien.

Architecture du microservice : client, middleware d'authentification JWT et RBAC, routeur Express, contrôleurs, base MySQL
Architecture et tests — le middleware d'authentification, les quatre cas de test qui comptent, et les six routes exposées.

Réalisations

Applications & bases

Jardin de Cocagne

PHP · Angular · Node · MariaDB

Trois applications, une seule base de données.

Jardin de Cocagne — espace client
Interface client de Jardin de Cocagne : paniers disponibles et abonnements
Espace client — catalogue de paniers, prix, abonnements et prochaines livraisons.
Détail

Le périmètre

Parcours d'achat, back-office de livraisons et tournées, application Android de suivi. Rôles et permissions strictement séparés.

La règle que je me suis fixée

Aucune règle de gestion dans le client. Si une contrainte compte, elle est appliquée côté serveur et garantie par la base.

Sakaniat

AREF de l'Oriental — ministère de l'Éducation nationale, Maroc

Gestion de logements administratifs. Conçue et développée seule, en stage.

  • 5 formulaires réglementaires numérisés
  • PDO · requêtes préparées
Sakaniat — logements administratifs
Page d'accueil de la plateforme Sakaniat, avec les espaces utilisateur et administrateur
Accueil de la plateforme — deux espaces séparés, utilisateur et administrateur.
Détail

Cahier des charges réel, gestion du projet en autonomie complète. Architecture MVC en PHP, modélisation de la base, numérisation de cinq formulaires réglementaires, génération de PDF, hachage des mots de passe et requêtes préparées PDO sur tous les accès.

Premier contexte avec des données personnelles réelles, et où la question « qui a le droit de voir cette ligne ? » est devenue concrète.

Diaporama de soutenance (PDF)

Modélisation relationnelle

SQL · MariaDB

Une contrainte dans la base vaut mieux qu'une vérification dans le code.

Détail

Schémas normalisés, choix des clés et index, intégrité référentielle, transactions, requêtes complexes. Le code peut être contourné par une nouvelle route, la base non.

Tests & qualité

Unitaires · intégration · CI

Je teste d'abord les chemins d'erreur.

Détail

Le cas nominal se vérifie tout seul à l'usage. Pas les autres. Exécution automatisée à chaque envoi via GitLab CI.