Fakultät Informatik/Mathematik Internettechnologien für Geoinformatik/Management
Prof. Dr.-Ing. habil. P. Sobe
12. Praktikum – AJAX, JSON und Webservices
Aufgabe1: AJAX, JSON-Kommunikation
Im Praktikum wird eine AJAX-basierte Anwendung programmiert, die ihre Nachrichten mittels JSON kodiert und austauscht. Dafür wird eine Datenstruktur als Array auf der Client-Seite in JavaScript angelegt, danach in eine JSON-Zeichenkette umgewandelt und an den Server gesendet. Der Server führt ein PHP-Skript aus, das eine JSON-kodierte Datenstruktur zurücksendet.
Die Eingabedatenstruktur ist ein Array aus Punkten mit einer Bezeichnung, einer x- Position und einer y-Position. Das Server-Skript soll daraus eine Entfernungsmatrix mit dem euklidischen Abstand der Punkte berechnen.
Teilaufgaben:
a) Installieren Sie die vorbereiteten Dateien ajaxpunkte.html und entfernungen.php im Installationsverzeichnis Ihres Webservers!
Machen Sie sich mit der Übertragung der Daten als JSON-kodierte Zeichenketten vertraut!
b) Erweitern Sie das Skript entfernungen.php um die Berechnung der Entfernungen zwischen allen Punkten!
d) Geben Sie die Entfernungen als JSON-Zeichenkette aus dem PHP-Skript zurück (anstatt der Eingabedaten)!
e) Erzeugen Sie auf der Client-Seite die Ergebnis-Datenstruktur und geben Sie diese auf der Webseite aus. Dazu wurde ein Element mit dem Namen
„earraytext“ vorbereitet, das in der Vorlage für ajaxpunkte.html mit der vom Server zurückgesendeten JSON-Zeichenkette gefüllt wird. Den Text in
„earraytext“ sollten Sie später für eine sinnvoll formatierte Auflistung der Punktpaare mit den Entfernungen verwenden.
Fakultät Informatik/Mathematik Internettechnologien für Geoinformatik/Management
Prof. Dr.-Ing. habil. P. Sobe
Aufgabe2: Webservices per SOAP und per REST
Ihnen werden zwei Server-Skripte in PHP bereitgestellt die einen Webservice mittels SOAP und mittels REST implementieren. Es handelt sich dabei um die Koordinatentransform, die Sie bereits in der flightinfo-Webanwendung benutzt haben.
Teilaufgaben:
a) Installieren Sie soap_server.php, rest_server.php und Slim.zip (als entpacktes Verzeichnis) im Publikationspfad Ihres Webservers (XAMPP)!
b) Ersetzen Sie in einer ersten Erweiterung Ihrer flightinfo-Webanwendung die lokalen Aufrufe der Funktion koordtransform() durch den folgenden PHP- Programmausschnitt:
// $xpos und $ypos aus $gbr und $gln berechnen
// Koordinatentransformation durch einen SOAP-Webservice
$xypos=json_decode($client->__soapCall("koordtransform", array($gbr, $gln), true);
$xpos=$xypos[0];
$ypos=$xypos[1];
Vor dem ersten Webservice Aufruf ist der SoapClient (Variable client) wie folgt zu erzeugen:
$client = new SoapClient(NULL, array(
"location" => "http://localhost/... /soap_server.php", "uri" => "urn:D1",
"style" => SOAP_RPC,
"use" => SOAP_ENCODED ));
Sie können die Quelltextteile aus der Datei webservice_client_codesnippets.txt als s.g. Code-Schnipsel entnehmen und an Ihre Web-Anwendung anpassen.
Insbesondere der Pfad in Zeile 3 oben muss entsprechend Ihrer lokalen Installation angepasst werden.
Führen Sie die Webanwendung durch Neuladen aus und überprüfen Sie, ob die Positionen auf der Karte richtig dargestellt werden!
Sie haben damit einem SOAP-Webservice für die Koordinatentransformation genutzt.
Aufgabe c) folgt umseitig.
Fakultät Informatik/Mathematik Internettechnologien für Geoinformatik/Management
Prof. Dr.-Ing. habil. P. Sobe
c) Ersetzen Sie in einer zweiten Erweiterung Ihrer flightinfo-Webanwendung die lokalen Aufrufe der Funktion koordtransform() durch den folgenden PHP- Programmausschnitt:
// $xpos und $ypos aus $gbr_start und $gln_start berechnen // Koordinatentransformation durch einen REST-Webservice
$url=sprintf('http://localhost/…/rest_server.php/koordtransform?gln=%f\&gbr=
%f',$gln,$gbr);
$xypos=json_decode(loadURL($url));
$xpos=$xypos[0];
$ypos=$xypos[1];
Auch hier können Sie Code-Schnipsel aus der Datei webservice_client_codesnippets.txt benutzen. Der Pfad in Zeile 3 muss entsprechend Ihrer lokalen Installation angepasst werden.
Die Funktion loadURL ist dazu wie folgt in Ihr PHP-Skript zu übernehmen:
// loadURL aus http://www.php-kurs.info/tutorial-webseiten_auslesen.html function loadURL($url)
{
$agent = "Meine Browserkennung v1.0 :)";
$header[] = "Accept: text/vnd.wap.wml,*.*";
$ch = curl_init($url);
if ($ch) {
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$tmp = curl_exec ($ch);
curl_close ($ch);
}
return $tmp;
}
Führen Sie die Webanwendung durch Neuladen aus und überprüfen Sie, ob die Positionen auf der Karte richtig dargestellt werden!
Sie haben damit einem REST-Webservice für jede einzelne Koordinatentransformation genutzt.