API REST en PHP natif + Doctrine ORM pour la gestion des utilisateurs et des reservations.
- PHP 8.1+
- MySQL
- Composer
- WAMP/XAMPP (ou serveur Apache/Nginx equivalent)
- Installer les dependances:
composer install- Verifier la connexion DB dans bootstrap.php:
- dbname
- user
- password
- host
-
Placer le projet dans le dossier web.
-
Demarrer Apache + MySQL.
Le point d'entree est:
/api/index.php
Exemple local:
http://localhost/kheti/back-end/api/index.php
- Succes:
{ "data": ... }ou{ "message": ... } - Erreur:
{ "error": "..." }
Codes HTTP utilises:
- 200 OK
- 201 Created
- 204 No Content (OPTIONS)
- 400 Bad Request
- 401 Unauthorized
- 404 Not Found
- 405 Method Not Allowed
- 409 Conflict
- 422 Unprocessable Entity
- Methode:
POST - URL:
/api/index.php/auth - Body JSON:
{
"email": "admin@example.com",
"password": "motdepasse"
}- Reponse:
{
"data": {
"user": {
"id": 1,
"name": "Nom",
"first_name": "Prenom",
"email": "admin@example.com",
"admin_state": 1
},
"token": "jwt_token"
}
}GET /api/index.php- Retourne la liste des endpoints principaux.
GET /api/index.php/users- Liste des utilisateurs
GET /api/index.php/users/{email}- Detail d'un utilisateur (id dans l'URL = email)
POST /api/index.php/users- Creer un utilisateur
PUT /api/index.php/users/{email}- Modifier un utilisateur
DELETE /api/index.php/users/{email}- Supprimer un utilisateur
Body attendu pour POST /users:
{
"name": "Doe",
"first_name": "John",
"email": "john@example.com",
"password": "secret",
"admin_state": 0
}GET /api/index.php/reservations- Liste des reservations
GET /api/index.php/reservations/{id}- Detail reservation
POST /api/index.php/reservations- Creer reservation
PUT /api/index.php/reservations/{id}- Modifier reservation
DELETE /api/index.php/reservations/{id}- Supprimer reservation
Body attendu pour POST /reservations:
{
"day": "2026-03-28",
"hour": "14:00",
"price": "45.00",
"adult_count": 2,
"child_count": 1,
"student_count": 0,
"email": "john@example.com"
}Regle metier actuelle:
- Capacite max de 10 personnes par couple
(day, hour).
curl -X POST "http://localhost/kheti/back-end/api/index.php/auth" \
-H "Content-Type: application/json" \
-d '{"email":"admin@example.com","password":"secret"}'curl -X POST "http://localhost/kheti/back-end/api/index.php/users" \
-H "Content-Type: application/json" \
-d '{"name":"Doe","first_name":"John","email":"john@example.com","password":"secret","admin_state":0}'curl -X POST "http://localhost/kheti/back-end/api/index.php/reservations" \
-H "Content-Type: application/json" \
-d '{"day":"2026-03-28","hour":"14:00","price":"45.00","adult_count":2,"child_count":1,"student_count":0,"email":"john@example.com"}'JSON invalide:- Verifier le body JSON et le header
Content-Type: application/json.
- Verifier le body JSON et le header
Identifiants invalides:- Verifier email/mot de passe et hash en base.
Ressource inconnue:- Verifier l'URL et le segment (
auth,users,reservations).
- Verifier l'URL et le segment (
Methode non autorisee:- Verifier la methode HTTP envoyee.
Creaneau plein:- La somme adultes + enfants + etudiants depasse la capacite du creneau.
api/index.php: routeur principal et logique APIbootstrap.php: configuration Doctrine + connexion DBsrc/Users.php: entite utilisateurssrc/Reservations.php: entite reservationsbin/doctrine: CLI Doctrine