SOAP Schnittstellen und PHP – Teil 2
Im ersten Teil habe ich euch die SOAP Schnittstelle von PHP kurz vorgestellt. Nun zeige ich wie man einen SOAP Client mit PHP erstellt. In diesem Artikel zeige ich auch wie man konkrete Daten von einer Schnittstelle abfragen kann. Dafür gibt es einige unterschiedliche Möglichkeiten.
SOAP Schnittstellen
Eine SOAP Schnittstelle ist eine recht einfache Art Daten für externe Programme bereitszustellen. SOAP Schnittstellen sind dabei sehr beliebt und kommen bei sehr vielen Web-Projekten zum Einsatz. Als Web Entwickler wird man mit SOAP immer wieder konfrontiert.
Funktionen und Typen
Wenn man die Schnittstelle noch nicht kennt, dann ist der erste Schritt, dass man sich die Funktionen und Typen die von der Schnittstelle akzeptiert werden anzeigen lässt. Das geht folgendermaßen:
echo "<h3>Functions</h3>"; $functions = $client->__getFunctions(); foreach($functions as $d){ echo "</br>".$d; } echo "</br><h3>Types</h3>"; $types = $client->__getTypes(); foreach($types as $t) { echo "</br>".$t; }
Der SOAP Client bietet dafür zwei Funktionen __getFunctions() liefert alle Funktionen in einem Array und __getTypes() liefert alle Typen in einem Array. Wichtig sind hier vor allem die Funktionen. Denn man kann mit der Schnittstelle nicht mehr machen, als es hier an Funktionalität gibt.
Funktionen aufrufen
Nehmen wir an, der oben ausgeführt Code brachte unter anderem folgendes Ergebnis:
ProduktlisteResponse getProduktliste(ProduktlisteRequest $body)
Offensichtlich können wir von der Schnittstelle eine Liste mit Produkten abfragen. Das funktioniert folgendermaßen. Wir erstellen einen ProduktlisteRequest, senden diesen an die Schnittstelle und bekommen von ihr einen ProduktlisteResponse. Was ist das? Wer sich einmal näher die WSDL angesehen hat wird feststellen, dass dort definiert ist, wie eben dieser Request bzw. Response auszusehen hat. Genau diese XML Struktur müssen wir nachbauen und mit unseren Daten füllen.
__soapCall
Mit dieser Funktion kann man über den SOAP Client einfach eine Funktion aufrufen. Welche das sein soll kann man als String im ersten Parameter angeben. Der zweite Parameter sollte dann der Request sein:
$response = $client->__soapCall("getProduktliste", $request); var_dump($response);
Als Ergebnis bekommen wir hier unseren Response, welchen wir testweise ausgeben.
Nach dem Funktionsnamen
Alternativ zu der oben genannten Möglichkeit kann man eine Funktion auch direkt über ihren Namen aufrufen. In unserem Testfall würde das so gehen:
$response = $client->getProduktliste($request); var_dump($response);
Request Objekt erstellen
Das Request Objekt wird der SOAP Funktion übergeben und wird an das Web Service geschickt. Im Prinzip ist das Request Objekt nicht mehr als ein XML Objekt, dass den Regeln der SOAP Schnittstelle gehorcht. Es gibt aber unterschiedliche Möglichkeiten so ein Objekt zu erstellen.
Array Request
Die einfachste Art einen Request zu erstellen ist der eines einfachen Arrays. Dabei ist es sehr wichtig die korrekte Verschachtelung mit der selben Hierarchie wie beim XML zu erzeugen. Hier mal ein Beispiel:
- für __soapCall
$request = array( 'parameters' => array( 'ProduktlisteAnfrage' => array( 'Kategorie' => 'Unterwäsche', 'Groesse' => 'M' ), ), );
- für Aufruf mit Funktionsnamen
$request = array( 'ProduktlisteAnfrage' => array( 'Kategorie' => 'Unterwäsche', 'Groesse' => 'M' ), );
Man beachte hier, dass man bei dem Aufruf über __soapCall auch die Ebene mit dem benannten Array ‚parameters‘ einfügen muss. In diesem Beispiel wollen wir von der Schnittstelle eines Webshops alle Unterwäsche der Größe M haben.
stdClass
Eine etwas übersichtlichere Möglichkeit ist das Erstellen einer stdClass Hierarchie. Das ist hinsichtlich der unzähligen Klammern vor allem bei komplexen Arrays sehr hilfreich. Hier wird gezeigt, wie dan oben genannte Beispiel mit stdClass aussieht:
$request = new stdClass(); $request->ProduktlistenAnfrage = new stdClass(); $request->ProduktlistenAnfrage->Kategorie = 'Unterwäsche'; $request->ProduktlistenAnfrage->Groesse = 'M';
Ich hoffe ich konnte mit diesem Artikel jedem Leser weiterhelfen. Bei Fragen bitte einfach ein Kommentar schreiben.
Fazit
SOAP Schnittstellen sind sehr weit verbreitet und als Web Entwickler stößt man bei größeren Projekten immer wieder auf externe Systeme die SOAP Schnittstellen benutzen. Ein solides Wissen darüber ist somit unbedingt erforderlich.
Teil 1 | Teil 2
Hi,
vielen dank für deine Anleitung. Mir hat es den Start mit SOAP deutlich vereinfacht.
Gruß
Super. Danke für den Beitrag!