Files
geo/api/docs/TECHBOOK.md
pierre 599b9fcda0 feat: Gestion des secteurs et migration v3.0.4+304
- 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>
2025-08-07 11:01:45 +02:00

301 lines
6.1 KiB
Markdown
Executable File

# Documentation Technique API RESTful PHP 8.3
## Table des matières
1. [Structure du projet](#structure-du-projet)
2. [Configuration du serveur](#configuration-du-serveur)
3. [Flux d'une requête](#flux-dune-requête)
4. [Architecture des composants](#architecture-des-composants)
5. [Base de données](#base-de-données)
6. [Sécurité](#sécurité)
7. [Endpoints API](#endpoints-api)
## Structure du projet
```plaintext
/api/
├── docs/
│ └── TECHBOOK.md
├── src/
│ ├── Controllers/
│ │ └── UserController.php
│ ├── Core/
│ │ ├── Router.php
│ │ ├── Request.php
│ │ ├── Response.php
│ │ ├── Session.php
│ │ └── Database.php
│ └── Config/
│ └── config.php
├── index.php
└── .htaccess
```
## Configuration du serveur
### Prérequis
- Debian 12
- NGINX
- PHP 8.3-FPM
- MariaDB 10.11
### Configuration NGINX
Le serveur NGINX est configuré pour rediriger toutes les requêtes vers le point d'entrée `index.php` de l'API.
### Configuration PHP-FPM
PHP-FPM est configuré pour gérer les processus PHP avec des paramètres optimisés pour une API.
## Flux d'une requête
Exemple détaillé du parcours d'une requête POST /api/users :
1. **Entrée de la requête**
- La requête arrive sur le serveur NGINX
- NGINX redirige vers PHP-FPM via le socket unix
- Le fichier .htaccess redirige vers index.php
2. **Initialisation (index.php)**
- Chargement des dépendances
- Initialisation de la configuration
- Démarrage de la session
- Configuration des headers CORS
- Initialisation du routeur
3. **Routage**
- Le Router analyse la méthode HTTP (POST)
- Analyse de l'URI (/api/users)
- Correspondance avec les routes enregistrées
- Instanciation du Controller approprié
4. **Traitement (UserController)**
- Vérification de l'authentification
- Récupération des données JSON
- Validation des données reçues
- Traitement métier
- Interaction avec la base de données
- Préparation de la réponse
5. **Réponse**
- Formatage de la réponse en JSON
- Configuration des headers de réponse
- Envoi au client
## Architecture des composants
### Core Components
#### Router
- Gère le routage des requêtes
- Associe les URLs aux Controllers
- Gère les paramètres d'URL
- Dispatch vers les méthodes appropriées
#### Request
- Parse les données entrantes
- Gère les différents types de contenu
- Nettoie et valide les entrées
- Fournit une interface unifiée pour accéder aux données
#### Response
- Formate les réponses en JSON
- Gère les codes HTTP
- Configure les headers de réponse
- Assure la cohérence des réponses
#### Session
- Gère l'état des sessions
- Stocke les données d'authentification
- Vérifie les permissions
- Sécurise les données de session
#### Database
- Gère la connexion à MariaDB
- Fournit une interface PDO
- Gère le pool de connexions
- Assure la sécurité des requêtes
## Sécurité
### Mesures implémentées
- Validation stricte des entrées
- Protection contre les injections SQL (PDO)
- Hachage sécurisé des mots de passe
- Headers de sécurité HTTP
- Gestion des CORS
- Session sécurisée
- Authentification requise
## Endpoints API
### Routes Publiques vs Privées
L'API distingue deux types de routes :
#### Routes Publiques
- POST /api/login
- POST /api/register
- GET /api/health
#### Routes Privées (Nécessitent une session authentifiée)
- Toutes les autres routes
### Authentification
L'authentification utilise le système de session PHP natif.
#### Login
```http
POST /api/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "SecurePassword123"
}
```
**Réponse réussie :**
```json
{
"message": "Connecté avec succès",
"user": {
"id": 123,
"email": "user@example.com"
}
}
```
**Notes importantes :**
- Un cookie de session PHP sécurisé est automatiquement créé
- Le cookie est httpOnly, secure et SameSite=Strict
- L'ID de session est régénéré à chaque login réussi
#### Logout
```http
POST /api/logout
```
**Réponse réussie :**
```json
{
"message": "Déconnecté avec succès"
}
```
### Sécurité des Sessions
La configuration des sessions inclut :
- Sessions PHP natives sécurisées
- Protection contre la fixation de session
- Cookies httpOnly (protection XSS)
- Mode strict pour les cookies
- Validation côté serveur à chaque requête
- use_strict_mode = 1
- cookie_httponly = 1
- cookie_secure = 1
- cookie_samesite = Strict
- Régénération de l'ID de session après login
- Destruction complète de la session au logout
### Users
#### Création d'utilisateur
```http
POST /api/users
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com",
"password": "SecurePassword123"
}
```
**Réponse réussie :**
```json
{
"message": "Utilisateur créé",
"id": "123"
}
```
**Codes de statut :**
- 201: Création réussie
- 400: Données invalides
- 401: Non authentifié
- 500: Erreur serveur
#### Autres endpoints
- GET /api/users
- GET /api/users/{id}
- PUT /api/users/{id}
- DELETE /api/users/{id}
## Intégration Frontend
### Configuration des Requêtes
Toutes les requêtes API depuis le frontend doivent inclure :
```javascript
fetch('/api/endpoint', {
credentials: 'include', // Important pour les cookies de session
// ... autres options
});
```
### Gestion des Sessions
- Les cookies de session sont automatiquement gérés par le navigateur
- Pas besoin de stocker ou gérer des tokens manuellement
- Redirection vers /login si session expirée (401)
## Maintenance et Déploiement
### Logs
- Logs d'accès NGINX : /var/log/nginx/api-access.log
- Logs d'erreur NGINX : /var/log/nginx/api-error.log
- Logs PHP : /var/log/php/php-error.log
### Déploiement
1. Pull du repository
2. Vérification des permissions
3. Configuration de l'environnement
4. Tests des endpoints
5. Redémarrage des services
### Surveillance
- Monitoring des processus PHP-FPM
- Surveillance de la base de données
- Monitoring des performances
- Alertes sur erreurs critiques