Les Routes : Fichier routes/api.php
Explications générales sur les Routes
Dans le contexte d'une API REST, les routes définissent comment les requêtes HTTP sont traitées par l'application. Elles déterminent quelles actions doivent être exécutées en fonction de l'URL et de la méthode HTTP (GET, POST, PUT, DELETE, etc.) utilisées. Les routes sont essentielles pour diriger les requêtes vers les contrôleurs appropriés, qui à leur tour interagissent avec les modèles pour effectuer les opérations nécessaires sur les données.
Explication détaillée du fichier routes/api.php
Explications supplémentaires
-
Constructeur : Le constructeur de la classe
FoodsControllerest utilisé pour initialiser l'objet avec une connexion à la base de données. Cela permet de réutiliser cette connexion dans toutes les méthodes de la classe. -
Méthodes du contrôleur : Chaque méthode du contrôleur correspond à une action spécifique qui peut être appelée par une route de l'API. Par exemple,
getAllFoodsest utilisé pour récupérer tous les aliments, tandis quegetFoodest utilisé pour récupérer un aliment spécifique par son ID. -
Interaction avec le modèle : Le contrôleur utilise les méthodes du modèle
Foodpour effectuer des opérations sur les données. Cela permet de séparer la logique de contrôle de la logique de données, ce qui rend le code plus modulaire et plus facile à maintenir. -
Gestion des données : Les méthodes du contrôleur reçoivent des données, généralement sous forme de tableau associatif, et les transmettent au modèle pour traitement. Cela permet de gérer les entrées de l'utilisateur et de les valider avant de les utiliser pour des opérations de base de données.
En utilisant ce contrôleur, vous pouvez gérer les requêtes HTTP entrantes, interagir avec les modèles pour effectuer des opérations sur les données, et renvoyer les réponses appropriées, ce qui est essentiel pour toute API REST.
<?php
require_once __DIR__ . '/../config/database.php';
require_once __DIR__ . '/../controllers/FoodsController.php';
$controller = new FoodsController($pdo);
$request_method = $_SERVER['REQUEST_METHOD'];
$url = $_GET['url'] ?? '';
// Gestion des routes basée sur le paramètre url du .htaccess
switch (true) {
case $url === 'foods' && $request_method === 'GET':
echo json_encode($controller->getAllFoods());
break;
case preg_match('/^foods\/(\d+)$/', $url, $matches) && $request_method === 'GET':
$id = $matches[1];
$food = $controller->getFood($id);
echo $food ? json_encode($food) : json_encode(['message' => 'Food not found']);
break;
case $url === 'foods' && $request_method === 'POST':
$data = json_decode(file_get_contents('php://input'), true);
$id = $controller->createFood($data);
echo json_encode(['message' => 'Food added successfully', 'id' => $id]);
break;
case preg_match('/^foods\/(\d+)$/', $url, $matches) && $request_method === 'PUT':
$id = $matches[1];
$data = json_decode(file_get_contents('php://input'), true);
$controller->updateFood($id, $data);
echo json_encode(['message' => 'Food updated successfully']);
break;
case preg_match('/^foods\/(\d+)$/', $url, $matches) && $request_method === 'DELETE':
$id = $matches[1];
$controller->deleteFood($id);
echo json_encode(['message' => 'Food deleted successfully']);
break;
default:
http_response_code(404);
echo json_encode(['message' => 'Route not found', 'url' => $url]);
break;
}
?>
Explications supplémentaires
-
require_once: Cette instruction est utilisée pour inclure et évaluer le fichier spécifié lors de l'exécution du script. Elle s'assure que le fichier est inclus une seule fois, ce qui évite les inclusions multiples. -
preg_match: Cette fonction est utilisée pour effectuer une recherche de motif dans une chaîne. Elle est utile pour extraire des informations spécifiques de l'URI de la requête, comme l'ID d'un aliment. -
json_encode: Cette fonction est utilisée pour convertir une valeur PHP en une chaîne JSON. Elle est utile pour renvoyer des réponses au format JSON, qui est le format de données standard pour les API REST. -
http_response_code: Cette fonction est utilisée pour définir le code de statut HTTP de la réponse. Elle est utile pour indiquer le résultat de la requête, comme 200 pour une requête réussie ou 404 pour une route non trouvée.
En utilisant ce fichier de routes, vous pouvez définir comment les requêtes HTTP sont traitées par votre API REST, en dirigeant les requêtes vers les contrôleurs appropriés pour effectuer les opérations nécessaires sur les données.