Wie man in 30 Minuten eine REST API in PHP schreibt: Praktische Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum REST API in PHP schnell und einfach ist

\n\n

REST (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\n

In 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\n

Was 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
\n\n

Schritt 1: Einrichtung der Projektstruktur und der Datenbank

\n\n

Zunä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).

\n\n

Projektstruktur

\n
rest-api-todo/\n│\n├── index.php        (Haupt-Router)\n├── config.php       (Datenbankverbindung)\n└── .htaccess        (SEO-freundliche URL-Konfiguration)
\n\n

Erstellung der MySQL-Datenbank

\n

Führen Sie diese SQL-Abfrage in phpMyAdmin oder über die Konsole aus:

\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('PHP lernen'), \n('REST API schreiben'), \n('Artikel veröffentlichen');
\n\n

Datei 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\n

Schritt 2: Erstellung eines einheitlichen Einstiegspunkts (Router)

\n\n

In der Datei index.php implementieren wir das Routing. Es verarbeitet die URL und leitet die Anfragen an die entsprechenden Funktionen weiter.

\n\n

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                

Blogs

Buchempfehlungen