Einleitung: Warum REST API in PHP schnell und einfach ist
\n\nREST (Representational State Transfer) ist ein Architekturstil, der zum Standard für die Erstellung von Webdiensten geworden ist. Viele Anfänger-Entwickler scheuen sich davor, eine API zu implementieren, da sie dies für eine komplexe Aufgabe halten. Tatsächlich kann man in nur 30 Minuten eine vollwertige REST API in PHP schreiben, wenn man der richtigen Struktur folgt.
\n\nIn dieser Anleitung erstellen wir eine einfache, aber funktionierende API zur Verwaltung einer Aufgabenliste (To-Do-Liste). Sie lernen, wie Sie HTTP-Methoden (GET, POST, PUT, DELETE) verarbeiten, mit JSON arbeiten und ein Routing aufbauen. Alle Codebeispiele sind startbereit.
\n\nWas Sie nach dem Lesen erhalten:
\n- \n
- Eine funktionierende REST API in reinem PHP ohne Frameworks \n
- Verständnis der Prinzipien der RESTful-Architektur \n
- Eine fertige Struktur zur Skalierung des Projekts \n
Schritt 1: Einrichtung der Projektstruktur und der Datenbank
\n\nZunächst erstellen wir eine einfache Ordnerstruktur. Wir benötigen nur eine PHP-Datei für das Routing (index.php) und eine Datei mit den Datenbankeinstellungen (config.php).
Projektstruktur
\nrest-api-todo/\n│\n├── index.php (Haupt-Router)\n├── config.php (Datenbankverbindung)\n└── .htaccess (SEO-freundliche URL-Konfiguration)\n\nErstellung der MySQL-Datenbank
\nFühren Sie diese SQL-Abfrage in phpMyAdmin oder über die Konsole aus:
\nCREATE 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('PHP lernen'), \n('REST API schreiben'), \n('Artikel veröffentlichen');\n\nDatei 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' => 'Fehler bei der Datenbankverbindung: ' . $e->getMessage()]);\n exit;\n}\n?>\n\nSchritt 2: Erstellung eines einheitlichen Einstiegspunkts (Router)
\n\nIn der Datei index.php implementieren wir das Routing. Es verarbeitet die URL und leitet die Anfragen an die entsprechenden Funktionen weiter.
Datei index.php (vollständiger Code)
\n<?php\nrequire_once 'config.php';\n\n$method = $_SERVER['REQUEST_METHOD'];\n$request = explode('/', trim($_SERVER['PATH_INFO'] ?? '/', '/'));\n\n// Aufgaben-ID ermitteln, falls übergeben\n$id = isset($request[0]) && is_numeric($request[0]) ? (int)$request[0] : null;\n\n// Verarbeitung verschiedener HTTP-Methoden\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' => 'Keine Aufgaben-ID angegeben']);\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' => 'Keine Aufgaben-ID angegeben']);\n }\n break;\n \n default:\n http_response_code(405);\n echo json_encode(['error' => 'Methode wird nicht unterstützt']);\n}\n\n// --- Implementierung der Funktionen ---\n\nfunction getTasks($pdo) {\n $stmt = $pdo->query("SELECT * FROM tasks ORDER BY created_a