- Ajout système complet de gestion des secteurs avec contours géographiques - Import des contours départementaux depuis GeoJSON - API REST pour la gestion des secteurs (/api/sectors) - Service de géolocalisation pour déterminer les secteurs - Migration base de données avec tables x_departements_contours et sectors_adresses - Interface Flutter pour visualisation et gestion des secteurs - Ajout thème sombre dans l'application - Corrections diverses et optimisations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
166 lines
6.2 KiB
Markdown
Executable File
166 lines
6.2 KiB
Markdown
Executable File
# Synthèse du Projet API PHP 8.3
|
|
|
|
## Introduction
|
|
|
|
Ce document présente une synthèse du projet API développé en PHP 8.3 sur Debian 12. Cette API modulaire sert de backend à plusieurs applications frontend, avec une architecture qui permet de traiter différemment les requêtes en fonction de l'application cliente.
|
|
|
|
## Architecture globale
|
|
|
|
### Caractéristiques principales
|
|
|
|
- **Langage** : PHP 8.3
|
|
- **Système d'exploitation** : Debian 12
|
|
- **Architecture** : REST API modulaire
|
|
- **Multi-applications** : Support de différentes applications frontend via un système de routage conditionnel
|
|
- **Sécurité** : Gestion des sessions, protection CORS, chiffrement des données sensibles
|
|
|
|
### Structure du projet
|
|
|
|
```
|
|
/api/
|
|
├── bootstrap.php # Initialisation de base et autoload
|
|
├── composer.json # Dépendances et configuration de l'autoload
|
|
├── index.php # Point d'entrée principal
|
|
├── routes/ # Définition des routes par application
|
|
│ ├── default.php
|
|
│ ├── prokov.php
|
|
│ └── resalice.php
|
|
├── src/
|
|
│ ├── Config/ # Configuration de l'application
|
|
│ ├── Controllers/ # Contrôleurs pour chaque ressource
|
|
│ ├── Core/ # Composants fondamentaux (routeur, DB, session)
|
|
│ └── Services/ # Services partagés
|
|
├── logs/ # Journaux d'activité
|
|
└── vendor/ # Dépendances externes
|
|
```
|
|
|
|
## Fonctionnement
|
|
|
|
### Système d'identification des applications
|
|
|
|
L'API identifie l'application cliente grâce à l'en-tête HTTP `X-App-Identifier`. Chaque application a son propre identifiant :
|
|
- `prokov.unikoffice.com` - Application Prokov
|
|
- `app.resalice.com` - Application Resalice
|
|
|
|
En fonction de l'identifiant, l'API :
|
|
1. Charge les routes spécifiques à l'application
|
|
2. Applique la configuration correspondante (base de données, préfixe API)
|
|
3. Active uniquement les modules nécessaires
|
|
|
|
### Flux de traitement d'une requête
|
|
|
|
1. La requête arrive sur `index.php`
|
|
2. Le système vérifie l'en-tête `X-App-Identifier` et charge la configuration appropriée
|
|
3. Le routeur analyse l'URI en tenant compte du préfixe API spécifique à l'application
|
|
4. Pour les routes privées, le système vérifie l'authentification via Session
|
|
5. Le contrôleur approprié est instancié et sa méthode appelée
|
|
6. Une réponse JSON est générée et renvoyée au client
|
|
|
|
## Composants principaux
|
|
|
|
### Classe AppConfig
|
|
|
|
Cette classe singleton gère la configuration de l'API, avec des paramètres spécifiques à chaque application :
|
|
- Connexion à la base de données
|
|
- Préfixe des routes API
|
|
- Modules activés
|
|
- Clés de chiffrement
|
|
|
|
### Classe Router
|
|
|
|
Le routeur gère :
|
|
- L'enregistrement des routes avec leur méthode HTTP (GET, POST, PUT, DELETE)
|
|
- La gestion des paramètres dynamiques dans les URLs
|
|
- La distinction entre routes publiques et privées
|
|
- Le dispatch vers les contrôleurs
|
|
|
|
### Classe Database
|
|
|
|
Gère la connexion à la base de données en utilisant PDO avec des paramètres optimisés pour la sécurité :
|
|
- Paramètres préparés
|
|
- Mode d'erreur strict
|
|
- Connexion unique (pattern Singleton)
|
|
|
|
### Classe Session
|
|
|
|
Gère l'authentification des utilisateurs et les sessions :
|
|
- Configuration sécurisée des cookies
|
|
- Support de l'authentification par Bearer token
|
|
- Vérification de l'activité et expiration
|
|
- Protection contre la fixation de session
|
|
|
|
### Classe ApiService
|
|
|
|
Fournit des fonctionnalités partagées :
|
|
- Envoi d'emails via PHPMailer
|
|
- Chiffrement et déchiffrement des données sensibles
|
|
- Support de deux types de chiffrement (recherchable et non-recherchable)
|
|
|
|
### Classe LogService
|
|
|
|
Gère la journalisation des événements avec des métadonnées structurées :
|
|
- Logs au format JSON pour faciliter l'analyse
|
|
- Rotation hebdomadaire des fichiers de logs
|
|
- Capture d'informations sur le client et l'environnement
|
|
|
|
## Sécurité
|
|
|
|
Le projet implémente plusieurs niveaux de sécurité :
|
|
|
|
1. **Authentification** : Session PHP sécurisée, support des tokens Bearer
|
|
2. **Protection des données** :
|
|
- Chiffrement des données sensibles (AES-256-CBC)
|
|
- Hachage sécurisé des mots de passe
|
|
3. **Sécurité HTTP** :
|
|
- Validation stricte du CORS
|
|
- En-têtes de sécurité (X-Content-Type-Options, X-Frame-Options, X-XSS-Protection)
|
|
- Cookies sécurisés (httpOnly, secure, SameSite=Strict)
|
|
4. **Sécurité des requêtes** :
|
|
- Validation des entrées
|
|
- Protection contre les injections SQL avec PDO
|
|
- Sanitisation des données
|
|
|
|
## Applications supportées
|
|
|
|
### Prokov (prokov.unikoffice.com)
|
|
|
|
Application avec le préfixe d'API `api/pkv`, supportant les modules :
|
|
- users
|
|
- logs
|
|
- admin
|
|
|
|
### Resalice (app.resalice.com)
|
|
|
|
Application avec le préfixe d'API `api/res`, supportant les modules :
|
|
- users
|
|
- logs
|
|
- site3
|
|
|
|
Fonctionnalités spécifiques :
|
|
- Gestion des profils utilisateurs avec des champs supplémentaires
|
|
- Gestion des professionnels
|
|
|
|
## Points d'extension
|
|
|
|
Le système est conçu pour faciliter l'ajout de nouvelles applications et fonctionnalités :
|
|
|
|
1. Ajouter une entrée dans la configuration AppConfig
|
|
2. Créer un fichier de routes spécifique dans le dossier routes/
|
|
3. Implémenter les contrôleurs spécifiques
|
|
4. Éventuellement ajouter des services spécifiques à l'application
|
|
|
|
## Dépendances externes
|
|
|
|
- **phpmailer/phpmailer** : Utilisé pour l'envoi d'emails
|
|
- **ext-pdo** : Pour la connexion à la base de données
|
|
- **ext-openssl** : Pour le chiffrement des données
|
|
- **ext-json** : Pour la manipulation JSON
|
|
|
|
## Conclusion
|
|
|
|
Cette API RESTful en PHP 8.3 présente une architecture modulaire bien structurée permettant de servir différentes applications frontend avec une base de code commune. Le système d'identification des applications et de routage conditionnel offre une grande flexibilité tout en maintenant une séparation claire des fonctionnalités.
|
|
|
|
La sécurité a été prise en compte à plusieurs niveaux, notamment par le chiffrement des données sensibles et une gestion sécurisée des sessions. Le système de logs permet également un suivi efficace de l'activité et facilite le débogage.
|
|
|
|
L'architecture modulaire facilite l'extension à de nouvelles applications et l'ajout de nouvelles fonctionnalités, ce qui en fait une solution évolutive à long terme.
|