Einfache REST-API mittels PHP
PHP lässt sich nicht nur verwenden um Webseiten mittels HTML dynamisch zu erzeugen, sondern erfreut sich auch wachsender Beliebtheit für die Entwicklung von Programmschnittstellen (API). Hier ruft kein Benutzer mittels Browser euren Webdienst auf, sondern ein anderes Programm ruft die Schnittstelle ab um von dieser Daten zu empfangen oder um an diese Daten zu übertragen. Das andere Programm kann dabei ein PHP-Script sein, oder ein JavaScript, oder irgendein anderes Programm in welcher Sprache auch immer entwickelt. Gerade bei großen Webanwendungen (wie Beispielsweise Bitcoin UP) hat es sich etabliert, die Anwendung mittels REST-API zur Verfügung zu stellen und für die Präsentation der Daten auf JavaScript zurück zu greifen.
Vorteile
Die Anwendung als API-Dienste zur Verfügung zu stellen und von der Darstellung (HTML) zu trennen hat mehrere Vorteile:
- Die Darstellung der Website kann bequem angepasst werden, um dass man die Programmlogik ändern muss.
- Die Website kann einfach erweitert werden, beispielsweise um eine App-Version der Website
- Die Funktion der Webanwendung lässt sich einfacher automatisiert testen
- Oftmals kann man in anderen Programmabschnitten bequem auf die existenten Schnittstellen zurück greifen.
Einfache REST API mittels PHP
In diesem Artikel zeige ich euch die einfachste Variante wie eine REST-API mittels PHP erstellt werden kann. Für größere Anwendungen empfiehlt es sich Frameworks wie beispielsweise Laravel oder Lumen zu verwenden.
In dieser Anwendung erstellen wir eine einfache To-Do-Liste. Hierzu erstellen wir eine entsprechende MySQL-Tabelle, und legen Routen an um die To-Do-Liste auszugeben, zu erweitern und zu löschen.
Datenbank
Zuerst erstellen wir eine Tabelle für das Abspeichern der To-Do-Liste:
1 2 3 4 5 |
CREATE TABLE `todo` ( `id` INT NOT NULL AUTO_INCREMENT , `text` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL , PRIMARY KEY (`id`) ) ENGINE = InnoDB; |
Einträge abfragen
Als nächsten erstellen wir eine Route, um die Einträge aus der Datenbank abzufragen. Dazu erstellen wir die overview.php Datei:
1 2 3 4 5 6 7 |
<?php header('Content-Type: application/json'); $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', ''); $statement = $pdo->prepare("SELECT * FROM todo ORDER BY id"); $statement->execute(); $data = $statement->fetchAll(PDO::FETCH_ASSOC); echo json_encode($data); |
Rufen wir nun diese Datei im Browser auf, erhalten wir folgende Ausgabe:
Hierbei handelt es sich um JSON, einem Format zum einfachen Austausch von Daten zwischen verschiedensten Programmen. JSON ist mittlerweile der Standard wenn es um die Programmierung von Programmschnittstellen geht: Es ist deutlich einfacher und bequemer zu verstehen und zu nutzen als andere Alternativen wie Beispielsweise XML. Jede moderne Programmiersprache bietet eigentlich Funktionen an um JSON-Daten bequem einzulesen oder Variablen in das JSON Format umzuwandeln. Gerade bei großen Webanwendungen, wie beispielsweise Bitcoin Revolution, ist JSON absolut standard.
Einträge hinzufügen
Funktionen die etwas am Datenbestand verändern werden laut REST-Standard als POST-Routen definiert. Sprich, diese Routen muss man mittels POST-HTTP-Aufruf ausführen und die Daten übergeben.
In PHP dies geht wie folgt, z.B. für add.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php header('Content-Type: application/json'); $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', ''); // Bekomme den JSON Body der Anfrage $data = json_decode(file_get_contents('php://input'), true); // Extrahiere den Text $text = trim($data['text'] ?? ''); if(strlen($text) == 0) { echo json_encode(["ok" => false]); } else { $statement = $pdo->prepare("INSERT INTO todo (text) VALUES (?)"); $ok = $statement->execute([$text]); echo json_encode(["ok" => $ok]); } |
Eine POST-Anfrage können wir im Browser nicht so einfach an die API senden. Als Programm zum Arbeiten mit APIs empfehle ich Insomnia, hiermit lassen sich beliebige HTTP-Anfragen bequem zusammen stellen.
In Insomnia, wir definieren eine neuen POST-Request und geben als Ziel unsere URL an. Als Body wir definieren den Type 'JSON' und übergeben unsere Eingaben im JSON Format.
Wie wir auf der rechten Seite sehen, antwortet der Server mit "ok" : true, und signalisiert, dass der Eintrag unserer To-Do-Liste erfolgreich hinzugefügt wurde.
Schlussworte
Wie add.php können wir ebenfalls remove.php erstellen um einen gewissen Eintrag wieder aus der Datenbank zu löschen. Diese zu erstellen überlasse ich als Übung euch.
Noch ist das Erstellen von APIs mittels reinem PHP nicht sonderlich bequem, da wir so recht schnell sehr viele kleine PHP-Dateien erstellen müssen. Daher empfiehlt es sich, wie oben geschrieben, ein Framework wie Laravel oder Lumen zu verwenden. Diese machen das Erstellen von APIs deutlich bequemer.
Autor: Nils Reimers