Einfaches Beispiel für SOAP Server + WSDL und Client in PHP

Kategorien: User facing SOA

Da ich zum Einstieg in meine Arbeit mit Webservices ein möglichst einfaches Beispiel eines komplett funktionierenden Webservices brauchte, aber im Internet nicht fündig wurde, habe ich mir letztendlich folgendes Beispiel in PHP entwickelt. Es erfüllt folgende Anforderungen.

  • möglichst einfach
  • Nutzung möglichst weniger Datein
  • Bereitstellung und Nutzung einer WSDL Datei des Services
  • Nutzung des SOAP Protokolls

service.php

<?php
class BeispielKlasse {
  /**
   * Diese Methode verbindet zwei Zeichenketten
   * mit einem "+" zu einer neuen Zeichenkette
   *
   * @param string $a
   * @param string $b
   * @return string
   */
  public function op1($a, $b) {
    return $a . ' + ' . $b;
  }
}
$soap_server = new SoapServer('service.wsdl');
$soap_server->setClass('BeispielKlasse');
$soap_server->handle();
?>

In der Datei service.php ist sowohl die Klasse definiert, die die Funktionalität kapselt, als auch die Instanz der Klasse SoapServer, die letztendlich den SOAP Request bearbeitet. Während der Instanziierung von $soap_server wird davon ausgegangen, dass es für der Service bereits durch eine WSDL Datei namens service.wsdl beschrieben wird. Diese service.wsdl wird im nächsten Schritt erzeugt.

service.wsdl

Die WSDL Datei namenes service.wsdl konnte ich mit der PHP IDE Zend Studio for Eclipse automatisch aus der vorhandenen Datei service.php generieren. Man kann im Zend Studio for Eclipse im WSDL-Dialog dazu einfach eine Datei auswählen und anschließende die in die WSDL-Datei zu exportierenden Funktionen und Klassen auswählen. Die Hilfe der IDE bietet dazu ebenfalls eine kurze Anleitung. Im Anschluss muss noch der WSDL-Port angegeben werden. Das ist die öffentliche Adresse der Datei, in der der SOAP Server per Aufruf der Methode handle() SOAP Requests behandelt. In diesem Fall also der öffentliche Pfad zur Datei service.php. Nachdem die WSDL Datei generiert wurde, ist bereits der komplett funktionsfähige SOAP Server fertig implementiert.

consumer.php

<?php
$soap_client = new SoapClient('http://meineUrl.de/service.wsdl');
echo $soap_client->op1('mein WSDL', 'Webservice Test');
?>

Bei der Entwicklung von SOAP Clients in PHP bietet Zend Studio for Eclipse ebenfalls einige nützliche Unterstützungen. Wenn man, wie hier in der 1. Zeile von consumer.php im Konstruktor von SoapClient, als Parameter die Adresse einer WSDL Datei angibt, werden die Infos aus der WSDL Datei im folgenden von der IDE benutzt, um Infos über verfügbarbe Methoden inklusive Beschreibungen aus deren Doku und Parameter direkt bei Schreiben von weiterem Code vorzuschlagen und per Code-Vervollständigung bei Bedarf zu ergänzen.

Tags: