# 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.
