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.")
);
}
?>