Einleitung: Warum Sie eine REST API in PHP brauchen
REST API (Representational State Transfer) ist ein Architekturstil, der es verschiedenen Anwendungen ermöglicht, über HTTP miteinander zu kommunizieren. Heutzutage kommt kein moderner Webdienst ohne API aus: Mobile Apps, SPA-Frontends, Integrationen mit Zahlungssystemen – all das erfordert eine schnelle und verständliche Schnittstelle für den Datenaustausch.
PHP bleibt eine der beliebtesten Sprachen für das Backend. Sie können eine vollwertige REST API in reinem PHP ohne umfangreiche Frameworks schreiben – das dauert nicht länger als 30 Minuten. In diesem Artikel werden wir ein praktisches Beispiel mit CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) für die Verwaltung einer Aufgabenliste (To-Do) durchgehen.
1. Umgebungsvorbereitung und Projektstruktur
Für die Arbeit benötigen Sie:
- Einen lokalen Server (Open Server, XAMPP, MAMP oder den integrierten PHP-Server)
- PHP Version 7.4 oder höher
- Einen Code-Editor (VS Code, PhpStorm)
Erstellen Sie einen Hauptordner rest-api-php und darin folgende Dateien:
rest-api-php/├── index.php (Einstiegspunkt, Router)├── config.php (Datenbankeinstellungen)├── api/│ ├── tasks.php (CRUD für Aufgaben)│ └── helpers.php (Hilfsfunktionen)└── .htaccess (Weiterleitung von Anfragen an index.php)1.1. .htaccess-Konfiguration für saubere URLs
Damit alle Anfragen an einen zentralen Einstiegspunkt geleitet werden, erstellen Sie die Datei .htaccess im Hauptverzeichnis:
RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php [QSA,L]Wenn Sie den integrierten PHP-Server verwenden, starten Sie ihn einfach aus dem Projektordner: php -S localhost:8000.
2. Erstellung des Routers und der Basis-API
Öffnen Sie index.php – dies ist unser Haupt-Handler. Er analysiert die HTTP-Methode und den URI und ruft die entsprechenden Funktionen auf.
2.1. index.php – Einstiegspunkt
<?phpheader("Content-Type: application/json; charset=UTF-8");header("Access-Control-Allow-Origin: *");header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");header("Access-Control-Allow-Headers: Content-Type, Authorization");
require_once 'config.php';require_once 'api/helpers.php';
$method = $_SERVER['REQUEST_METHOD'];$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);$uri = rtrim($uri, '/');
// Einfaches Routingif ($uri === '/api/tasks') { require_once 'api/tasks.php'; handleTasks($method);} elseif (preg_match('/^\\/api\\/tasks\\/(\\d+)$/', $uri, $matches)) { require_once 'api/tasks.php'; handleTask($method, (int)$matches[1]);} else { sendResponse(['error' => 'Endpoint not found'], 404);}?>Wir verarbeiten zwei Routen: /api/tasks (Liste/Erstellen) und /api/tasks/{id} (bestimmte Aufgabe).
2.2. helpers.php – Hilfsfunktionen
<?phpfunction sendResponse($data, $status = 200) { http_response_code($status); echo json_encode($data, JSON_UNESCAPED_UNICODE); exit;}
function getJsonInput() { $input = file_get_contents('php://input'); return json_decode($input, true) ?? [];}?>3. Arbeit mit der Datenbank und CRUD-Operationen
Erstellen wir eine einfache Tabelle tasks in MySQL:
CREATE TABLE tasks ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, status ENUM('pending', 'completed') DEFAULT 'pending', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);Datei config.php:
<?php$host = 'localhost';$dbname = 'rest_api_db';$username = 'root';$password = '';
try { $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO: