Powered by
Übersetzen ![]() Hallo! Du bist nicht angemeldet. Wenn Du Dich anmeldest, dann kannst Du hier Kommentare verfassen
und Dich mit anderen Nutzern austauschen. Es werden keine
Daten von Dir ausspioniert und nach einer Stunde wirst Du
hier automatisch wieder abgemeldet. Internet (31) Technik (28) Programmierung (13) Linux (10) OpenWrt (5) Sonstiges (5) WLAN (5) Web Analytics (3) Weiterempfehlen « PHP und SOAP » (01.10.2011 12:00)
Ich möchte aber mal ein bisschen weiter ausholen und in die Vergangenheit schauen, bevor ich mich der eiskalten Praxis zuwende. Es muss so etwa das Jahr 2004 gewesen sein, da ich einen Vortrag über das SOAP Protokoll hielt, welches auf HTTP aufsetzt. Dies tat ich also etwa ein Jahr nachdem Version 1.2 verabschiedet wurde. Schon damals war man sich nicht richtig sicher, inwieweit SOAP sich durchsetzen würde. Heute sieht das bedeutend anders aus. Auf den Nutzen möchte ich aber später nocheinmal eingehen. Einen SOAP Service mit PHP entwickelnEs war lange relativ schwierig gute Bibliotheken für die Verwendung von SOAP in PHP zu finden. Schließlich möchte man ja nicht gezwungen sein eine eigene Bibliothek zu schreiben, denn dann werden einige Vorteile von SOAP überflüssig und es macht wirklich keinen sonderlichen Spaß eine eigene SOAP Bibliothek entwickeln zu müssen. Ich habe bereits ein paar Mal eigene SOAP Bibliotheken - sowohl in PHP als auch anderen Sprachen - entwickelt, weil sich die Entwickler des Service nicht an den Standard hielten - ich denke evtl, weil sie ihn nicht verstanden haben. Für PHP und SOAP empfehle ich die Bibliothek NuSOAP (erhätlich bei SourceForge). NuSOAP ist Open Source, untersützt SOAP 1.1 komplett und benötigt keine PHP Extensions. Für meinen Blog, den Du hier gerade liest, habe ich mit NuSOAP einmal einen Service programmiert, mit welchem man alle Artikel auslesen kann. /* config file for general configs */
require_once("../config.php");
/* use the database for queries */
require_once("../class/database.class.php");
/* nusoap library for SOAP */
require_once("../lib/Nusoap/nusoap.php");
/* article service api server */
$soap = new soap_server;
// configure the WSDL to show up on ?wsdl requests
$soap->configureWSDL('ArticleApiService', "http://".CONFIG_CDN_PRIMARY_DOMAIN."/");
// define soap interop as default standard schema
$soap->wsdl->schemaTargetNamespace = 'http://soapinterop.org/xsd/';
// add the complex type for the article itself
$soap->wsdl->addComplexType(
'articleList',
'complexType',
'array',
'all',
'',
array(
'articleTitle'=>array('name'=>'articleTitle','type'=>'xsd:string'),
'articleBody'=>array('name'=>'articleBody','type'=>'xsd:string'),
'articleLink'=>array('name'=>'articleLink','type'=>'xsd:string'))
);
// register the methods
$soap->register(
'getArticleList',
array(), array('List' => 'tns:articleList'),
'http://soapinterop.org/'
);
$soap->service(isset($HTTP_RAW_POST_DATA) ?
$HTTP_RAW_POST_DATA : '');
/* getArticleList method implementation */
function getArticleList() {
$articeList = array(); // result object
$db = new database();
$dblist = $db->getArticleList();
for($a=0;$agetArticle($dblist[$a]["url"]);
$articeList[$a] = array("articleTitle" => $dbarticle["title"],
"articleBody" => $dbarticle["body"],
"articleLink" => "http://".CONFIG_CDN_PRIMARY_DOMAIN
."/".$dbarticle["url"].".html");
}
return $articeList; // return result
}
Die Methoden nach der Instanzierung sind eigentlich selbst erklärend. Die Methode "configureWSDL" definiert, dass beim Anhängen von "?wsdl" als query parameter entsprechend die WSDL Datei ausgegeben wird. Diese befindet sich dann hier: http://www.kammerath.net/api/article.php?wsdl. Als Schema Namespace verwende ich hier den Standard. Mit der Methode "addComplexType" füge ich einen "komplexen Typen" zur WSDL Datei hinzu. Einen solchen muss ich immer dann definieren, wenn ich in einer Methode nicht nur einen einfachen Datentypen wie einen String oder Integer zurückgeben möchte. Da es sich bei PHP schwache, implizite und dynamische Typisierung verwendet, SOAP jedoch auf expliziter und starker Typisierung aufsetzt, müssen wir die Datentypen unserer Rückgabewerte und Parameter definieren. In der Methode "register" sehen wir, dass neben dem Namen "getArticleList" als zweiter Parameter ein leeres Array angegeben ist (heißt: kein Parameter) und als Rückgabewert unser komplexer Typ mit dem Instanznamen "List". Ganz unten ist dann entsprechend die Methode in PHP runterprogrammiert. Das war es dann auch schon und nun kann man den Service in verschiedenen Programmiersprachen auf verschiedenen Betriebssystemen verwenden. Ich persönlich empfehle für das Testen und Entwickeln von SOAP Diensten die Software soapUI. Sie ist auch auf dem Screenshot am Anfang des Artikels. Es ist durchaus auch hilfreich, zu verstehen und zu sehen, wie SOAP auf HTTP funktioniert. Dafür eignet sich soapUI super, man kann aber schlimmstenfalls auch auf Wireshark zurückgreifen. Wireshark empfehle ich insbesondere dann, wenn Entwickler von SOAP Diensten Abweichungen vom Standard eingebaut haben. Ein bekanntes Beispiel ist z.B. "SOAP with Attachments" oder kurz SwA. Verwenden von SOAP Diensten mit PHPDas Ausführen von Methoden mit SOAP und PHP ist noch einfacher als das Entwickeln eines Dienstes. Alles was wir dazu mit NuSOAP machen müssen, ist einen SOAP Client instanzieren, als Parameter die Dienst-URL übergeben und fertig. Anschließend können wir auch entsprechend die Methoden ausführen und erhalten die Ergebnisse direkt als PHP Objekte. // Pull in the NuSOAP code
require_once('nusoap.php');
// Create the client instance
$client = new soapclient('http://www.kammerath.net/api/article.php');
// Call the SOAP method
$result = $client->call('getArticleList', array());
// Display the result
print_r($result);
In diesem Fall erhalten wir dann als $result entsprechend die oben definierte articleList als Array. Zusammengefasst ist der Client also lediglich 2 Zeilen groß. Mit REST XML müssten wir hier noch HTTP Abfragen (mind. mit file_get_contents) durchführen und zu JSON serialisieren oder XML parsen. Näheres zu den Unterschieden im nächsten Abschnitt. Vorteile von SOAP mit PHP gegenüber REST mit XML oder JSONViele Dienstanbieter im Internet verwenden mittlerweile neben SOAP für Ihre APIs auch noch REST mit XML oder JSON. Letzteres ist sehr beliebt geworden, da es z.B. in PHP sehr einfach deserialisiert werden kann. REST API Dienste funktionieren meistens so, dass man GET Parameter überträgt und als Ergebnis JSON oder XML Daten bekommt. JSON kann man dann deserialisieren und XML entsprechend parsen. JSON lässt sich zwar schnell und einfach serialisieren und deserialisieren, es gibt aber nur eine implizite Typisierung und keine explizite - so wie bei SOAP. Des Weiteren gibt es bei JSON und XML REST APIs auch überhaupt keine Dienstebeschreibung wie die WSDL bei SOAP. Ändert der Entwickler des Dienstes diesen also ohne die Dokumentation ordentlich weiter zu führen, dann kann man die Eingabe und Ausgabe Parameter nur Testen und Erraten. Mit SOAP's WSDL hat man immer automatisiert eine Dienstbeschreibung, die korrekt ist. Denn wäre die WSDL für den Dienst nicht korrekt, würde dieser auch nicht funktionieren. Die gängigen Client Bibliotheken in .NET, PHP oder Java berufen sich immer auf die mit WSDL angegebenen Diensteinformationen. Häufig kommt auch sog. JSON-RPC zum Einsatz. Dies ist kein Standard und beschreibt lediglich das Verfahren, dass anstelle von HTTP GET Parametern JSON Objekte per POST übertragen werden. Es wird also ähnlich wie SOAP agiert, jedoch mit JSON und ohne Dienstbeschreibung. Anwendungsgebiete von SOAP mit PHPFür SOAP gibt es mittlweile eine Fülle von Anwendungsszenarien und so gut wie jede größere Software oder jedes größere System verfügen zusätzlich auch über SOAP Schnittstellen, um die Individualisierung zu erlauben und sich in Unternehmensprozesse eingliedern zu können. Ein Beispiel für meine SOAP Schnittstelle wäre z.B. dass wenn Nutzer sich über neue Artikel per E-Mail informieren wollten, könnte das System welches die E-Mails versendet über die SOAP Schnittstelle die Artikel abfragen und E-Mails versenden, sobald ein neuer Artikel online ist. Ich möchte aber einmal ein paar interessante und bekannte SOAP Dienste vorstellen.
Wer noch mehr SOAP APIs sehen möchte, dem kann ich die Seite ProgrammableWeb.com sehr empfehlen. Hier findet man tolle Übersichten über alle möglichen APIs. Auch JSON APIs wie z.B. die von Twitter oder Facebook. Wer SOAP also von der Client Seite einfach einmal ausprobieren möchte, der findet hier großartige Möglichkeiten. Bücher zum Thema „PHP SOAP“ Es sind eine Reihe interessanter PHP SOAP-Bücher und Veröffentlichungen rund um das Thema „PHP SOAP“ erschienen, wozu unter
Anderem „Webservices mit PHP: XML-RPC, SOAP, WSDL, Verzeichnisdienste, Sicherheit (Galileo Computing)“ von Christian Wenz, erschienen bei
Galileo Computing für 8,95 €, zählt. Gut und empfehlenswert ist auch das 218-Seiten starke Buch „Professionelle Softwareentwicklung mit PHP 5: Objektorientierung, Entwurfsmuster, Modellierung und fortgeschrittene Datenbankprogrammierung“ von Sebastian Bergmann (erschienen bei Dpunkt Verlag). Der Autor Sebastian Bergmann bietet ein paar sehr hilfreiche Details zum Thema PHP SOAP in seinem Buch, welches mit einem Preis von 29,00 € auch noch recht erschwinglich für ein PHP SOAP-Buch ist. Wenn es um PHP SOAP-Wissen geht sollte das Buch
„Google, Amazon, eBay: Die neuen APIs nutzen mit PHP, Perl und .NET (Galileo Computing)“ ebenfalls nicht ungenannt bleiben. Carsten Harnisch hat hier viele gute Informationen
über PHP SOAP festgehalten. „Google, Amazon, eBay: Die neuen APIs nutzen mit PHP, Perl und .NET (Galileo Computing)“ wird
durch Galileo Computing herausgegeben, kostet
€ und umfasst insgesamt 432
äußerst informative Seiten. Gleichwohl hier im Artikel PHP und SOAP und auch in anderen Artikeln zahlreiche Informationen über PHP SOAP zu finden sind, empfiehlt sich immer ein Blick auf aktuelle Buchveröffentlichungen, da natürlich auch im Bereich PHP SOAP sich die Dinge mit der Zeit ändern. Besonders empfehlen kann ich das Lesen auf dem Amazon Kindle, welches eine besonders angenehme Möglichkeit ist, PHP SOAP-Bücher unterwegs zu lesen. 14 Besucher haben auch das gelesen 7 Besucher haben auch das gelesen 5 Besucher haben auch das gelesen 4 Besucher haben auch das gelesen 4 Besucher haben auch das gelesen 4 Besucher haben auch das gelesen Du musst Dich lediglich mit deinem Benutzer über Facebook anmelden,
um hier Kommentare schreiben zu können.
» Mit Facebook anmelden. Diese Website wird im Rechenzentrum von GoDaddy.com in Amsterdam betrieben. Telefon +49 2241 955 98 60 oder E-Mail Kontakt. Das Kammerath Network Website System ist unter der Mozilla Public License 1.1 veröffentlicht. Diese Website wurde von Jan Kammerath entwickelt und ist
in Ihren Bestandteilen somit teilweise Eigentum von Jan
Kammerath. Sie besteht jedoch auch aus Teilen, die unter der
Open Source Lizenzen veröffentlicht wurden. Die Familie Kammerath besitzt
zudem E-Mail Adressen unter dieser Domain und wenn Du auch ein Kammerath bist, dann kannst Du Dich gerne melden und vielleicht bekommst Du
dann auch eine E-Mail Adresse bei Kammerath.net oder Kammerath.com.
Wenn Du Dich fragst, woher der Name Kammerath kommt, dann
können selbst die besten Ahnenforscher Dir dies nicht so richtig
beantworten, denn Kammerath ist schon ein sehr spezieller
Nachname. |