Ein SOAP Webdienst erstellen
Was ist SOAP?
SOAP ist ein XML basiertes Protokoll für Daten Verteilung. Mit SOAP erstellen wir auf unserem Server eine Datenschnittstelle/API, die jeder anzapfen kann. Diese Datenschnittstelle kann komplexe Informationen beinhalten wie Funktionen, Objekte, Datentypen, Parameter, Rückgabewerte und einiges mehr. Zudem erreichen wir mit SOAP eine lose Kopplung unsere Systeme. Damit wären Client und Server unabhängig voneinander. Es können mehrere unterschiedliche Clients(Browser, Android, IOS, Mac, Windows…) geben die auf einem und dem selben Webdienst zurückgreifen.
Funktionsweise von SOAP
Der Server stellt ein XML Dokument zur verfügung. Der Client kann das XML Dokument aufrufen und verarbeiten. Ein SOAP Webdienst können wir über verschiedene Protokolle aufrufen wie zum Beispiel HTTP, FTP oder SMTP.
SOAP unter PHP5
PHP unterstützt SOAP seit der 5.0 Version. SOAP in der php.ini freischalten. php.ini auf meinem System finden.
extension=php_soap.dll //Semicolon am Anfang entfernen
Webdienst für den Server
Zuerst erstellen wir auf unserem Server eine Klasse, die wir später für andere Clients mit SOAP bereitstellen.
<?php
// WebService.php
/**
* PHP Klasse
*/
class WebService
{
public function sagHallo($name = "Max Mustermann")
{
return "Hallo ".$name;
}
}
Unsere zuvor erstellte Klasse "WebService" können wir als Webdienst zur verfügung stellen, indem wir den "SOAPServer" Konstruktor aufrufen und unsere Klasse diesem übergeben.
<?php
// WebService.php
/**
* SOAP Webservice erstellen
*/
$server = new SOAPServer( null, array(
'uri' => 'http://localhost/sagHallo', // namespace
'encoding' => 'UTF-8', // Zeichensatz
'soap_version' => SOAP_1_2 // SOAP Version
));
/**
* "WebService Klasse" als Service zur verfügung stellen
*/
$server->setClass('WebService');
/**
* WebService ausführen
*/
$server->handle();
SOAPServer in Einzelheiten
Der erste Parameter ist eine WSDL Datei ( optional ). Der zweiter Parameter ist ein Array, für unsere Konfiguration.
uri
Namespace für unseren Webdienst
soap_version
SOAP_1_1 oder SOAP_1_2
encoding
Zeichensatz z.B UTF-8
Auf SOAP-Webdienst zugreifen
Obwohl wir unser SOAP-Webdienst mit PHP erstellt haben können wir trotzdem mit fast allen höheren Programmiersprachen darauf zugreifen. Zum Beispiel:
- C/C++
- PHP
- Java
- Python
- Ruby
- Objective-C
Wir rufen den SoapClient Konstruktor auf. Der erste Parameter erwartet eine WSDL Datei (Optional). Der zweiter Parameter ist ein Array, für unsere Konfiguration.
location
URL zum SOAP-Webdienst
uri
Referenz zum Namespace (ohne Host)
soap_version
SOAP_1_1 oder SOAP_1_2
<?php
// client.php
/**
* SOAP Service aufrufen.
*/
$soap = new SoapClient(null, array(
'location' => 'http://localhost/WebService.php',
'uri' => 'http://sagHallo',
'soap_version' => SOAP_1_2
));
/**
* Die Methode sagHallo aufrufen.
*/
echo $soap->sagHallo("Dein Name");
Mit der "$soap" Variable haben wir einen vollständigen zugriff auf unsere zuvor erstellte Klasse "WebService".
SOAP-Webdienst per HTTP aufrufen: http://localhost/client.php
SOAP und WSDL
Bei "SOAPServer" und "SoapClient" können wir eine "WSDL Datei" übergeben. Wenn wir eine WSDL Datei haben benötigen wir keine weiteren Informationen zu übergeben. Da sich alle Informationen in der WSDL Datei befinden. WSDL ist eine XML basiertes Dokument und steht für "Web Services Description Language". Mehr dazu: WSDL Einführung
Alexander Naumov
Contao Freelancer, PHP Entwickler und Web Allrounder