Einfacher REST Service in PHP (Responses in JSON) mit GET/POST Methoden
Kategorien: User facing SOA
REST steht für ‘Representational State Transfer‘ und ist ein zustandsloser Architekturstil mit einfachen Schnittstellen, bei dem Ressourcen in einem verteilten System durch spezifische URIs (meist über HTTP) angesprochen werden können. Auf Session Management und eine Transportschicht wie bspw. SOAP wird der Einfachheit halber verzichtet.
Einfacher REST Service in PHP
Folgender PHP Code implementiert einen einfachen, idempotenten REST Service zum Speichern und Abfragen von Key-Value Paaren.
Dem Service Werte per POST übergeben
Per POST können dem Service solche Paare übergeben werden, der Key im Parameter ‘key’ und der zugehörige Wert im Parameter ‘value’. Diese Parameter müssen beide vorhanden sein, damit der Service sie speichert.
Werte im JSON Format per GET vom Service abfragen
Per GET können Values im JSON Format abgefragt werden, indem man den entsprechenden Key im GET Parameter ‘key’ übergibt. Eine Abfrage des Wertes vom Key myKey würde zum Beispiel so aussehen:
http://meinServiceUrl.tld/restService.php?key=myKey
Installation des Services
Einfach eine PHP Datei auf einem Webserver erstellen und im selben Verzeichnis zur Speicherung der Daten eine leere Textdatei namens ‘db.txt‘ erstellen und dafür sorgen, dass die PHP Datei Lese- und Schreibrechte für diese Datei hat.
PHP Code des REST Services
<?php
$filename = 'db.txt';
$handle = fopen($filename, 'r');
if($content = fgets($handle)) {
$db = unserialize($content);
} else {
$db = array();
}
fclose($handle);
if($_GET['key']) {
echo json_encode($db[$_GET['key']]);
} else if($_POST['key'] && $_POST['value']) {
$db[$_POST['key']] = $_POST['value'];
}
$handle = fopen($filename, 'w');
fputs($handle, serialize($db));
fclose($handle);
?>
HTML Code zum Senden von Requests mit POST Parametern
Der folgende HTML Code kann benutzt werden, um POST-Requests an den Service zu senden und bspw. den Service damit zu testen.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>REST-Service Client</title>
</head>
<body>
<h1>REST-Service Client</h1>
<form action="restService.php" method="post">
<table border="0" cellpadding="0" cellspacing="4">
<tr>
<td>Key:</td>
<td><input name="key" type="text"></td>
</tr>
<tr>
<td>Value:</td>
<td><input name="value" type="text"></td>
</tr>
<tr>
<td>Abschicken:</td>
<td>
<input name="Submit" type="submit" value="Abschicken">
</td>
</tr>
</table>
</form>
</body>
</html>