Comment écrire une API REST en PHP en 30 minutes : guide pratique

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : pourquoi une API REST en PHP est rapide et simple

\n\n

REST (Representational State Transfer) est un style architectural devenu standard pour la création de services web. De nombreux développeurs débutants hésitent à se lancer dans la réalisation d'une API, la considérant comme une tâche complexe. En réalité, écrire une API REST complète en PHP peut se faire en seulement 30 minutes, si l'on suit une structure appropriée.

\n\n

Dans ce guide, nous allons créer une API simple mais fonctionnelle pour gérer une liste de tâches (To-Do List). Vous apprendrez à gérer les méthodes HTTP (GET, POST, PUT, DELETE), à travailler avec JSON et à mettre en place le routage. Tous les exemples de code sont prêts à être exécutés.

\n\n

Ce que vous obtiendrez après la lecture :

\n
    \n
  • Une API REST fonctionnelle en PHP pur sans frameworks
  • \n
  • La compréhension des principes de l'architecture RESTful
  • \n
  • Une structure prête pour la mise à l'échelle du projet
  • \n
\n\n

Étape 1 : Configuration de la structure du projet et de la base de données

\n\n

Pour commencer, créons une structure de dossiers simple. Nous aurons besoin d'un seul fichier PHP pour le routage (index.php) et d'un fichier de configuration de la base de données (config.php).

\n\n

Structure du projet

\n
rest-api-todo/\n│\n├── index.php        (routeur principal)\n├── config.php       (connexion à la base de données)\n└── .htaccess        (configuration des URL propres)
\n\n

Création de la base de données MySQL

\n

Exécutez cette requête SQL dans phpMyAdmin ou via la console :

\n
CREATE DATABASE todo_api;\n\nUSE todo_api;\n\nCREATE TABLE tasks (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    title VARCHAR(255) NOT NULL,\n    completed BOOLEAN DEFAULT FALSE,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);\n\nINSERT INTO tasks (title) VALUES \n('Apprendre PHP'), \n('Écrire une API REST'), \n('Publier un article');
\n\n

Fichier config.php

\n
<?php\n// config.php\nheader('Content-Type: application/json');\nheader('Access-Control-Allow-Origin: *');\nheader('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');\nheader('Access-Control-Allow-Headers: Content-Type');\n\n$host = 'localhost';\n$dbname = 'todo_api';\n$username = 'root';\n$password = '';\n\ntry {\n    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);\n    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n} catch(PDOException $e) {\n    echo json_encode(['error' => 'Erreur de connexion à la base de données : ' . $e->getMessage()]);\n    exit;\n}\n?>
\n\n

Étape 2 : Création d'un point d'entrée unique (routeur)

\n\n

Dans le fichier index.php, nous implémentons le routage. Il traitera l'URL et redirigera les requêtes vers les fonctions correspondantes.

\n\n

Fichier index.php (code complet)

\n
<?php\nrequire_once 'config.php';\n\n$method = $_SERVER['REQUEST_METHOD'];\n$request = explode('/', trim($_SERVER['PATH_INFO'] ?? '/', '/'));\n\n// Déterminer l'ID de la tâche, s'il est fourni\n$id = isset($request[0]) && is_numeric($request[0]) ? (int)$request[0] : null;\n\n// Gestion des différentes méthodes HTTP\nswitch($method) {\n    case 'GET':\n        if ($id) {\n            getTask($pdo, $id);\n        } else {\n            getTasks($pdo);\n        }\n        break;\n        \n    case 'POST':\n        createTask($pdo);\n        break;\n        \n    case 'PUT':\n        if ($id) {\n            updateTask($pdo, $id);\n        } else {\n            http_response_code(400);\n            echo json_encode(['error' => 'ID de tâche non spécifié']);\n        }\n        break;\n        \n    case 'DELETE':\n        if ($id) {\n            deleteTask($pdo, $id);\n        } else {\n            http_response_code(400);\n            echo json_encode(['error' => 'ID de tâche non spécifié']);\n        }\n        break;\n        \n    default:\n        http_response_code(405);\n        echo json_encode(['error' => 'Méthode non prise en charge']);\n}\n\n// --- Implémentation des fonctions ---\n\nfunction getTasks($pdo) {\n    $stmt = $pdo->query("SELECT * FROM tasks ORDER BY created_a                

Blogs

Book Recommendations