← Retour aux projets
Projet BTS SIO SLAM

Développement en équipe · 2025 — 2026

API Ministage

Gestion et réservation de mini-stages inter-établissements

Conception d'une API REST sécurisée avec Symfony & API Platform

Dans le cadre d'un projet BTS, j'ai participé au développement d'une application permettant aux élèves de réserver des sessions de mini-stages dans leur établissement ou dans un autre. Le projet expose une API REST sécurisée consommable par n'importe quel front-end, avec une gestion fine des rôles et des accès. L'architecture suit les conventions REST et les bonnes pratiques Symfony, avec une convention de nommage stricte sur les branches et pull requests.

Environnement Technique

PHPSymfonyAPI PlatformPostgreSQLDBeaverPHPStormTwig

Architecture du projet
Entity · Repository · Controller · DataFixtures

Le projet suit l'architecture MVC de Symfony, avec une séparation claire entre les entités Doctrine, les repositories, et les contrôleurs. Les DataFixtures permettent de peupler la base PostgreSQL avec des données de test cohérentes pour chaque entité. API Platform expose automatiquement les opérations CRUD sécurisées via des annotations directement sur les entités.

src/
├── ApiResource/
├── Controller/
│   ├── RegistrationController.php
│   └── UserController.php
├── DataFixtures/
│   ├── AcademieFixtures.php
│   ├── AppFixtures.php
│   ├── EleveFixtures.php
│   ├── EtablissementFixtures.php
│   ├── FonctionFixtures.php
│   ├── FormationFixtures.php
│   ├── MinistageFixtures.php
│   ├── ProfesseurFixtures.php
│   ├── ProfilFixtures.php
│   ├── ReservationFixtures.php
│   ├── TypeEtabFixtures.php
│   ├── TypeFormationFixtures.php
│   ├── UserFixtures.php
│   └── UtilisateurFixtures.php
├── Entity/
│   ├── Academie.php
│   ├── Eleve.php
│   ├── Etablissement.php
│   ├── Fonction.php
│   ├── Formation.php
│   ├── Ministage.php
│   ├── Professeur.php
│   ├── Profil.php
│   ├── Reservation.php
│   ├── TypeEtab.php
│   ├── TypeFormation.php
│   ├── User.php
│   └── Utilisateur.php
├── Kernel.php
└── Repository/
    ├── AcademieRepository.php
    ├── EleveRepository.php
    ├── EtablissementRepository.php
    ├── FonctionRepository.php
    ├── FormationRepository.php
    ├── MinistageRepository.php
    ├── ProfesseurRepository.php
    ├── ProfilRepository.php
    ├── ReservationRepository.php
    ├── TypeEtabRepository.php
    ├── TypeFormationRepository.php
    ├── UserRepository.php
    └── UtilisateurRepository.php
User (id, email, roles, password)Utilisateur (#id, nom, prenom, mail)Profil (id, nom, #idUtilisateur)Fonction (id, nom, #idUtilisateur)Etablissement (id, rne, nom_etab, telephone, ville, adresse, mail, cp, #idMinistage, #idEleve, #idUtilisateur)Academie (id, nom, #idEtablissement)TypeEtab (id, nom, nomcourt, #idEtablissement)Formation (id, nom, #idMinistage)TypeFormation (id, nom, nomcourt, #idFormation)Eleve (id, nom, prenom, classe, date_naiss)Ministage (id, date_debut, date_fin, nb_place, nb_place_reste, lieu)Professeur (id, nom, prenom, #idMinistage)Reservation (id, confirmation, rappel, absence, #idUtilisateur, #idEleve, #idMinistage)Proposer (#idEtablissement, #idFormation)
Schéma de la base de donnée Tucana

Sécurité & gestion des rôles
JWT · Voters Symfony · RBAC

Chaque endpoint est protégé par des expressions de sécurité Symfony directement sur les opérations API Platform. Quatre rôles distincts définissent les permissions d'accès en lecture, écriture et suppression.

ROLE_ADMINAccès total
ROLE_PROGRAMMATIONGestion des ministages
ROLE_RESERVATIONRéservations
ROLE_CONSULTATIONLecture seule

Endpoints principaux
REST · GET · POST · PATCH · DELETE

L'API respecte les conventions REST standard. Les URLs suivent le pattern /api/{ressource} avec les méthodes HTTP correspondantes. La convention de nommage des branches suit le pattern Feat_{Entity} et les pull requests Feat_{Entity} #{num_ticket}.

GET/api/ministages
POST/api/ministages
PATCH/api/ministages/{id}
DELETE/api/ministages/{id}
GET/api/reservations
POST/api/reservations
GET/api/etablissements
GET/api/eleves
Tableau Kanban GitHub du projetExemple d'un ticket m'ayant été attribuéExemple de code, de l'entité formation.phpExemple de test via Insomnia, résultat de la requête sur /api/login