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>