Das schöne am HTTP-Request-System ist, dass der Programmierer Clientseitig (also aus dem JS) eine PHP-Klasse instanzieren kann. Dazu sind verschiedene PHP- bzw. JS-Komponenten nötig, um die sich der Entwickler allerdings (fast) nicht mehr kümmern muss:
Server-Seitig (PHP):
service.php, die per HTTP aufgerufene Dateiservices.inc.php, In dieser Datei werden die Verfügbaren Services definiertcore/api_provider.inc.php, Diese Klasse instanziert und verwaltet die Objekte der Services core/stdfuncs.inc.php, stellt allgemeine Funktionen zur VerfügungClient-Seitig (JS):
scripts/core/phpremote.js, Führt HTTP-Requests durch, interpretiert Response und lädt neue Servicesscripts/core/stdfuncs.js, Bibliothek mit Standard FunktionenEin Service ist die Abstraktion einer API. Von einer Service-Klasse gibt es jeweils zwei Instanzen: Die eine auf der Server-Seite, die andere auf der Client-Seite. Ein Service wird mit seinem Namen aufgerufen. Der Name des Services muss nicht dem PHP-Klassennamen entsprechen.
In der Datei services.inc.php wird definiert unter welchem Servicenamen mit welchen Parametern instanzierte PHP-Klassen laufen sollen.
Beispielinhalt der services.inc.php Datei
$services['timer_zeit']['module'] = "modules/timer/timer_api.inc.php";
$services['timer_zeit']['class'] = "timer_api"; // nicht unbedingt nötig, da Klassen-name gleich ist wie File-Name
$services['timer_zeit']['params'] = array("H:i:s");
In diesem Fall würde dann ein Service mit dem Namen „timer_zeit“ zur Verfügung stehen.
Man kann sich ein Array aller Methoden die dieser Service anbietet abrufen mit dem HTTP-Aufruf
service.php?method=getMethods¶meter[0]=timer_zeit
Die HTTP-Response wäre dann
["__construct", "__sleep", "__wakeup", "getTime"]
Um die Methode getTime aufzurufen wäre dann folgender Request fällig
service.php?service=timer_zeit&method=getTime
Die oben geschilderten Details der Serviceaufrufes können mit der Hilfe von phpremote.js erledigt werden. Importierten Sie diese beiden Javascript Dateien:
<script type='text/javascript' src='scripts/core/stdfuncs.js'></script> <script type='text/javascript' src='scripts/core/phpremote.js'></script>
Danach ist folgendes Möglich:
var timerApi = services.getApi('timer_zeit') // Starte den Service, macht intern: getMethods
var zeit = timerApi.getTime(); // Macht HTTP-Request und interpretiert HTTPRespose
services ist ein Objekt dass nach dem importireen von phpremode.js global zut Verfügung steht