SOAP Schnittstellen und PHP – Teil 1
Mit dem SOAP Protokoll kann man mittels Schnittstelle Daten mit anderen Computern austauschen. Dabei spielt die Konfiguration, das Betriebssystem oder unterschiedliche Hardware keine Rolle, solange man sich an die Definition der Schnittstelle hält. Als Programmierer kommt man immer wieder in die Situation, wo man Daten aus einer definierten Schnittstelle auslesen muss.
SOAP und PHP
Sehr oft wird für Schnittstellen zu externen Systemen SOAP verwendet. Aus meiner Erfahrung möchte ich euch hier zeigen wie das mit PHP geht. In meinem Fall kommuniziere ich von einem Linux Server mit PHP als Programmiersprache mit einem Windows Server, der die Schnittstelle über .NET freigibt. Aber wie gesagt ist die Architektur der Systeme egal.
Tipp!
Wer viel mit SOAP arbeitet oder arbeiten muss und nach Fehlern sucht, dem empfehle SOAPUI. Damit kann man recht einfach und schnell mit einer SOAP Schnittstelle manuell arbeiten und Dinge probieren bevor man das mühsam mit PHP implementiert.
Nativer PHP Client
PHP verfügt seit der Version 5 über einen nativen SOAP Client. Dieser versteht sowohl SOAP 1.1 als auch 1.2. SOAP ist ein Netzwerkprotokoll und wird hin und wieder um Funktionen erweitert, deshalb ändern sich die Versionsnummern. Derzeit sind diese beiden aktuell und werden normalerweise auch von jeder Schnittstelle angeboten. Um einen SOAP Client erstellen braucht man folgenden Code:
$client = new SOAPClient($wsdl, $parameter);
Wie hier zu sehen ist benötigen wir für einen SOAP Client 2 Parameter. Das erste ist die so genannte WSDL, das andere ist ein Array mit Parametern.
WSDL
Die WSDL wird benötigt um überhaupt mit der Schnittstelle kommunizieren zu können. Die WSDL definiert wie man mit der Schnittstelle kommunizieren muss und kann auch festlegen, welche Daten man bekommen kann und welchen Typ diese haben. So kompliziert das auch klingen mag, die WSDL ist einfach eine XML Datei, die definiert, welche Elemente man bei den XML Dateien zur Kommunikation zu erwarten hat. Die Kommunikation verläuft so:
- Request
Der Sender (das sind wir) schickt eine XML Datei an das Webservice. In diesem XML steht drin, was wir von der Schnittstelle haben wollen. Wir dürfen hier nur Elemente und Werte angeben, welche in der WSDL definiert sind. Andernfalls bekommen wir eine Fehlermeldung zurück. - Response
Der Empfänger (das ist das Webservice) akzeptiert die XML Anfrage, sammelt die Daten und schickt diese wieder als XML zurück. Auch hier ist der Aufbau der Antwort XML im WSDL definiert.
Durch diese definierte Kommunikation wird weder der Sender, noch der Empfänger mit Daten überrascht, die er nicht erwartet hat. Leider ist aber somit die Kommunikation sehr strikt und man braucht eventuell lange bis man fehlerfrei Kommunizieren kann. Die WSDL wird bei .NET Schnittstellen üblicherweise so aussehen:
http://www.webservicedomain.at/test/Webservice.asmx?WSDL
Die Schnittstellendefinition kann man sich auch im Browser anzeigen. Das ist eine lange XML Datei.
Parameter
Es gibt zahlreiche Parameter die man angeben kann. Eine komplette Liste findet man hier. Sehr oft ist es der Fall, dass Schnittstellen Daten nur an registrierte Benutzer hergeben. In solchen Fällen kann man zum Beispiel seine Logindaten als Parameter übergeben. Weiters kann man hier auch die verwendete SOAP Version angeben. Eine Liste von Parametern könnte so aussehen:
$soap_param = Array( 'login' => "LOGIN", 'password' => "PASSWORD", 'soap_version' => SOAP_1_2, 'exceptions' => True, 'trace' => 1 );
Es werden Logindaten und Passwort übergeben. Außerdem wollen wir das SOAP Protokoll mit Version 1.2 verwenden. Die beiden anderen Parameter benötigen wir zu Debugzwecken.
Im nächsten Teil zeige ich euch, wie ihr auf unterschiedliche Weise mit der Schnittstelle kommunizieren könnt.
Teil 1 | Teil 2