Diese Seite ist noch eine Baustelle. Die Programme sind ungetestet. Ich weiß auch noch nicht, wann ich sie einmal fertigstellen kann.
Mit PHP lässt sich ein REST-Server erstellen. Ein REST-Server verwendet HTTP, um eine Daten-Ressource zur Verfügung zu stellen. Der Client greift bestimmt über die URL, welchen Datenbestandteil er bearbeiten will.
HTTP und das REST-Interface
Methoden
Die Client-Anfragen kodieren ihre gewünschten Aktivitäten nach den Methoden des HTTP-Protokolls (GET, POST, DELETE, UPDATE, ...). Der Wert von $_SERVER['REQUEST_METHOD'] liefert die Methode als 'GET', 'POST' usw.. Die Argumente der Methode werden durch Zugriff aus assoziative Datenstrukturen ausgelesen, die den Schlüssel in rechteckigen Klammern verwenden. So kann $_GET['name'] verwendet werden, wenn auf der Wert des Namens aus der Anfrage gelesen werden soll. Analog läuft der Zugriff bei _POST und den anderen Methoden.Als Beispiel kann ein REST-Gerüst verwendet werden, wie es unter FIT4PHP.net: PHP-Tutorial - REST-Schnittstellen ausführlicher beschrieben ist und dort als Dateiserver verwendet wird.
<?php $methode = $_SERVER['REQUEST_METHOD']; $req = explode('/', trim($_SERVER['PATH_INFO'],'/')); $argument = isset($req[0]) && !empty($req[0]) ? $req[0] : NULL; $daten = file_get_contents('php://input'); echo ("<h1>Hallo</h1>"); switch ($methode) { case 'GET': if ($argument == NULL) { echo ('Argument ist leer.<p>'); } else echo ('Übergebenes Argument: '.$argument); break; case 'POST': echo ('Übergebene POST-Argumente: '.$argument. $daten); break; case 'PUT': echo ('Übergebene POST-Argumente: '.$argument. $daten); break; case 'DELETE': echo ('Übergebenes Argument: '.$argument); break; } ?>
Datenformate
Das Datenformat kann unter andem als XML oder JSON festgelegt werden. Dazu verwendet der Client den HTTP-Eintrag ACCEPT. Der Server antwortet mit dem HTTP-Eintrag CONTENT-TYPE.Der Inhalt von ACCEPT und CONTENT-TYPE legt das Format fest.
- text/xml oder application/xml steht für das XML-Format
- text/json steht für JSON.
Status-Meldungen
HTTP verwendet dreistellige Statusmeldungen.
Datenbankverbindung
Viele Provider bieten PHP und die Datenbank MySQL auf dem Host als kostenlose Beigabe an. Darum ist es sinnvoll, den PHP-Zugriff auf MySQL näher zu betrachten.In der Datenbank fewo wird ein Benutzer fewouser angelegt, dem die Datenbank gehört.
Mit der folgenden Klasse Database wird die Verbindung zur Datenbank hergestellt.
<?php class Database { private $host = "127.0.0.1"; private $dbname = "fewo"; private $username = "user"; private $password = "geheim"; public $conn; public function getConnection(){ $this->conn = null; try{ $this->conn = new PDO( "mysql:host=" . $this->host . ";dbname=" . $this->dbname, $this->username, $this->password); $this->conn->exec("set names utf8"); }catch(PDOException $exception){ echo "Database could not be connected: " . $exception->getMessage(); } return $this->conn; } } ?>
Datenbanktabelle
Die Daten in der Tabelle Wohnung können in einer PHP-Klasse verwaltet werden. Dazu werden die Spalten in Attributen abgebildet. Die Methoden getWohnung, createWohnung, getSingleWohnung, updateWohnung und deleteWohnung führen dann die Aktionen auf der Tabelle aus.<?php class Wohnung { private $conn; // DB-Verbindung private $db_table = "Wohnung "; public $id; public $name; public $miete; public function __construct($db){ $this->conn = $db; } public function getWohnung (){ $sqlQuery = "SELECT id, name, miete FROM " . $this->db_table . ""; $stmt = $this->conn->prepare($sqlQuery); $stmt->execute(); return $stmt; } public function createWohnung (){ $sqlQuery = "INSERT INTO ". $this->db_table ." SET name = :name, miete = :miete; $stmt = $this->conn->prepare($sqlQuery); $this->name=htmlspecialchars(strip_tags($this->name)); $this->miete=htmlspecialchars(strip_tags($this->miete)); $stmt->bindParam(":name", $this->name); $stmt->bindParam(":miete", $this->miete); if($stmt->execute()){ return true; } return false; } public function getSingleWohnung (){ $sqlQuery = "SELECT id, name, miete FROM ". $this->db_table ." WHERE id = ? LIMIT 0,1"; $stmt = $this->conn->prepare($sqlQuery); $stmt->bindParam(1, $this->id); $stmt->execute(); $dataRow = $stmt->fetch(PDO::FETCH_ASSOC); $this->name = $dataRow['name']; $this->miete = $dataRow['miete']; } public function updateWohnung (){ $sqlQuery = "UPDATE ". $this->db_table . " SET name = :name, miete = :miete WHERE id = :id"; $stmt = $this->conn->prepare($sqlQuery); $this->name=htmlspecialchars(strip_tags($this->name)); $this->miete=htmlspecialchars(strip_tags($this->miete)); $this->id=htmlspecialchars(strip_tags($this->id)); // bind data $stmt->bindParam(":name", $this->name); $stmt->bindParam(":miete", $this->miete); $stmt->bindParam(":id", $this->id); if($stmt->execute()){ return true; } return false; } // DELETE function deleteWohnung (){ $sqlQuery = "DELETE FROM " . $this->db_table . " WHERE id = ?"; $stmt = $this->conn->prepare($sqlQuery); $this->id=htmlspecialchars(strip_tags($this->id)); $stmt->bindParam(1, $this->id); if($stmt->execute()){ return true; } return false; } } ?>
Auslesen der Wohnungen
Hier werden nun alle Wohnungen aus der Datenbank ausgelesen und in einem Array abgelegt.<?php header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=UTF-8"); include_once 'database.php'; include_once 'wohnung.php'; $database = new Database(); $conn = $database->getConnection(); $items = new Wohnung($conn); $stmt = $items->getWohnung(); $anzzeilen = $stmt->rowCount(); echo json_encode($anzzeilen); if($anzzeilen > 0){ $wohnungen = array(); $wohnungen["body"] = array(); $wohnungen["anzzeilen"] = $anzzeilen; while ($zeile = $stmt->fetch(PDO::FETCH_ASSOC)){ extract($zeile); $e = array( "id" => $id, "name" => $name, "email" => $email, "age" => $age, "designation" => $designation, "created" => $created ); array_push($wohnungen["body"], $e); } echo json_encode($wohnungen); } else{ http_response_code(404); echo json_encode( array("message" => "No record found.") ); } ?>