460 likes | 616 Views
SOAP-Kurs Einführung und praktische Beispiele. Ziele des SOAP-Kurses. Grundbegriffe verstehen: Web-Services, SOA, WDSL, UDDI, usw. Zusammenhang zwischen SOAP und Web-Services verstehen Architektur der Web-Services kennen SOAP: Konzept, Übermittlung, Aufbau, Inhalt
E N D
SOAP-Kurs Einführung und praktische Beispiele
Ziele des SOAP-Kurses • Grundbegriffe verstehen: Web-Services, SOA, WDSL, UDDI, usw. • Zusammenhang zwischen SOAP und Web-Services verstehen • Architektur der Web-Services kennen • SOAP: Konzept, Übermittlung, Aufbau, Inhalt • Die wichtigsten SOAP-Implementierung für PHP nutzen können: PHP-SOAP, PEAR::SOAP 2
Übersicht • SOAP in der Theorie (heute) • Web-Services • SOAP • WSDL • UDDI • SOAP in der Praxis (morgen) • SOAP-Implementierungen für PHP • SOAP mit PHP-SOAP • SOAP mit PEAR::SOAP • WSDL mit PEAR::SOAP 3
Am Anfang war der Web-Service • SOAP ist das Kernstück der Web-Services • In manchen Veröffentlichungen erscheint SOAP als Synonym für Web-Services • Nicht korrekt, aber verdeutlicht dessen Bedeutung für den Web-Service • Wie hängen SOAP und Web-Services zusammen? • Was ist den überhaupt ein Web-Service und wofür braucht man diesen? 4
Was ist ein Web-Service? • Ein Web-Service ist ein Stück Logik, das sich irgendwo auf einem Server im Internet befindet und über Standard-Internet-Protokolle wie HTTP oder SMTP ansprechen lässt. • Kommunikationspartner sind hier Maschinen; Maschine-zu-Maschine-Kommunikation • Kein Benutzer notwendig! • Maschinen sprechen unterschiedliche Sprachen • Einheitliche Standards für den Daten -und Funktionalitätsaustausch notwendig 5
Web-Services: Die Idee Plattform- und sprachunabhängige Kommunikation Web-Service Anwendungs-programm Web-Service-Nutzer Plattform- und sprachspezifische Kommunikation 6
Was ist ein Web-Service? Web-Anwendungsserver Anwendungs-programm Service-Proxy Service-Listener 7
Was ist ein Web-Service? • Paradebeispiele • Google: Google-Suche auf der eigenen Seite, z. B. sjaensch.org • Amazon: Shop-Suche als Partnerprogramm, z. B. http://www.php9.com/amazon.php • Dell: Warenwirtschaftssystem • vascoda :-) • Nutzt SOAP-RPC für die Metasuche • Jeder Dienstanbieter bietet die Funktion "query" • SOAP-Anfrage enthält Suchkriterien • SOAP-Antwort enthät Datensätze 8
Web-Services: Eigenschaften • Modular, einfach und dezentral • Technologien müssen XML-basiert sein • Adressierbar sein • Plattformunabhängig • Erweiterbar • Sicher und verlässlich • Administrierbar • RPC-Unterstützung (RPC = Remote Procedure Calls) • Dokumentenaustausch 9
Web-Services: Konzept Web-Service Protokollstapel (siehe auch W3C) Namensdienst für Web-Services: Auffinden von WSDL zu interessierenden Web-Services Ebene Protokolle Entdeckung UDDI, DISCO, WSIL, ebXML Beschreibung WSDL, RDF, ebXML Beschreibung der verpackten Nutzdaten Verpackung SOAP, XML-RPC Transport HTTP, SMTP, FTP, BEEP… Verpackt die Nutzdaten Netzwerk TCP/IP 10
Web-Services: Interaktionsmodell Dienst wird in einem WSD-Dokument beschrieben und beim Service-Verzeichnis registriert WSD Web-Service-Verzeichnis Finden Publizieren WSD Web-Service-Anbieter Web-Service- Nutzer SOAP Web Service Description Nutzdaten • Interaktionsmodell basiert auf SOA (Service Oriented Architecture) Verfügbare Dienste Muss WSD kennen, damit er korrekt auf den Dienst zugreifen kann Bietet Dienst nach außen hin an Interaktion 11
Web-Services: Interaktionsmodell • Möglichkeiten der Ausgestaltung des Interaktionsmodells: • Web-Service-Konsument und -Anbieter kennen sich vor der Interaktion. Syntax und Semantik ihrer Interaktionen muss beiden Partnern klar sein. • Web-Service-Konsument und -Anbieter kennen sich vorher, die WSD wird dynamisch geladen. Semantik muss klar sein. • Es gibt mehrere Web-Service-Anbieter, die Auswahl des Dienstes erfolgt manuell und die WSD wird dynamisch geladen. • Es gibt mehrere Web-Service-Anbieter, die Auswahl des Dienstes erfolgt manuell und die Web-Service-Beschreibung kommt vom Web-Service-Anbieter. • Es gibt mehrere Web-Service-Anbieter, die Auswahl erfolgt automatisch. 12
Web-Services ausprobieren • Kleines Beispiel zum Ausprobieren: <?php $client = new SoapClient('http://www.xmethods.net/sd/2001/BabelFishService.wsdl'); $result = $client->BabelFish('de_en', 'Hallo Welt'); echo $result; ?> 13
Web-Services: Alternativen • CORBA (Common Object Request Broker Architecture) • REST (Representional State Transfer) • Remoting: .NET Remoting, Java RMI • EDI (Electronic Data Interchange) 14
SOAP: Geschichte • ~1998 Dave Winer veröffentlicht "RPC over HTTP via XML" • Dave Winer entwickelt XML-RPC (unterstützt von Microsoft) • Microsoft leitete von XML-RPC SOAP ab • Am 18. April 2000 reichte Microsoft mit Unterstützung von Ariba, HP, IBM, IOAN Technologies , SAP AG usw. SOAP 1.1 beim W3C ein • Die aktuelle Version von SOAP ist 1.2 und liegt seit Juni 2003 als Empfehlung beim W3C vor 15
SOAP: Definition • SOAP ehemals Simple Object Access Protocol • Von "simple" kann bei dem Standard keine Rede sein • Mit "Object Access" (Objektzugriff) hat das Protokoll wenig zu tun • Seit Version 1.2 ist SOAP kein Akronym mehr! • Definition: SOAP ist ein leichtgewichtiges Protokoll (Thin-Client-Protokoll) zum Austausch struturierter Informationen in einer dezentralisierten verteilten Umgebung. 16
SOAP: Eigenschaften und Spezifikation • Einfaches und erweiterbares Protokoll • Grundausstattung ohne Sicherheit, Verlässlichkeit und Transaktionen • Spezifikation ist sehr offen, aber umfangreich • Zur Zeit in der Version 1.2: • XML Protocol Working Group • SOAP Version 1.2 Part0: Primer → Allgemeine Einführung • SOAP Version 1.2 Part1: Messaging Framework →Aufbau und Funktionsweise einer SOAP-Nachricht • SOAP Version 1.2 Part2: Adjuncts →Zusätzliche Definitionen 17
SOAP: Nachrichtenformat Transportprotokoll (HTTP) SOAP-Envelope SOAP-Header Headerblock Headerblock SOAP-Body Nachricht Wurzelelement und Namensraum. Obligatorisch Transportiert die Anwendungsdaten. Obligatorisch Dient zur Angabe von Informationen, die nicht direkt als Anwendungsdaten zu klassifieren sind (z. B. Transaktions-nummer) .Der Header ist optional! Anwendungs-spezifischer Teil 18
SOAP: Nachrichtenformat • Beispiel: <?xml version=„1.0“ encoding=„utf-8“?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XML-Schema-instance" Xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <env:Header>...</env:Header> <env:Body> <r:reservierung xmlns:r="http://www.airborel.de/Reserierung"> <r:hinflug> <r:abflugort>Freiburg</r:abflugort> <r:ankunftsort>Los Angeles</r:ankunftsort> </r:hinflug> <r:rueckflug>...</r:rueckflug> </env:Body> </soap:Envelope> Header (optional) Namensraum für den anwendung-spezifschen Teil SOAP-Nachricht SOAP-Nachrichten verwenden einen eigenen Namensraum für alle Tags, die zum Envelope gehören (hier env) 19
SOAP: Übermittlung • Für die Praxis kann man die Spezifikation auf folgende Punkte vereinfachen: • Nachrichten-Art = Message Exchange Pattern (MEP): In der Praxis entweder RPC-MEP (RPC/encoded) oder dialog-orientierte MEP (document/literal) • Pfad der Nachricht: Kommunikation läuft direkt vom Sender zum Empfänger • Protokollbindung: HTTP ist Wahl der meisten Implementierungen und Anwendungen 20
SOAP: Übermittlung Anfrage Sender Empfänger Antwort Nachricht Sender Empfänger • Dialogorientierte MEP • Nachrichten werden in einer Richtung zwischen den SOAP-Knoten ausgetauscht • asynchron • RPC-MEP • Anfrage-Antwort • synchron 21
SOAP: Übermittlung • Protokollbindung • HTTP ideal als Transportmodell • Request-Response-Muster passt hervorragend zum SOAP-RPC-Stil • URIs identifizieren die Endpunkte • Bekannte Adressierungsschemata können für SOAP-Knoten übernommen werden • Auch in HTTP gibt es Zwischenknoten (z. B. Proxies), so dass auch hier die beiden Konzepte sehr gut zusammenpassen 22
SOAP Encodings • Web-Service-Anbieter und –Konsument müssen die gleiche Sprache sprechen • SOAP-Encoding: Erlaubt die Angabe von Datentypen für ein XML-Element • SOAP-Spezifikation 1.1: http://schemas.xmlsoap.org/soap/encoding • SOAP-Spezifikation 1.2: http://www.w3.org/2003/05/soap-encoding • Seit Version 1.2 sind diese Kodierungsregeln optional • XML-Schemadefinition statt SOAP-Encoding • SOAP-Implementierungen übernehmen das Encoding für uns. Uff ! • Vorsicht! Manche Implementierungen sind sich nicht einig, welche Encoding-Variante angewandt werden soll: • Am verbreitesten RPC/encoded • Mickeysoft setzt alles auf document/literal 23
SOAP-Encodings • Datentypen • An die Datentypen des XML-Schema-Standards angelehnt: http://www.w3.org/TR/xmlschema-2/ • Aufteilung in einfache (primitive) und komplexe Datentypen • Primitive Datentypen: String, boolean, int, byte… • Komplexe Datentypen: Array 24
SOAP Fehlermanagement • Fehlermanagement • SOAP-Fault: Besonderer Nachrichtentyp, der über Fehler informiert • Fehler werden von SOAP-Spezifikationen 1.1 und 1.2 unterschiedlich behandelt • Fehlermanagement ist der beiden SOAP-Versionen ist inkompatibel • neue Fehlercodes (z. B. DataEncodingUnknown) • Andere Namen (z. B. Client wurde durch Sender ersetzt) • Es gibt Regeln, wie eine Implementierung sich verhalten muss, damit sie mit beiden Spezifikationen zurecht kommt! 25
SOAP: Aufbau 26
Web-Service: Beispiel • Im Browser bitte folgende URL eingeben: • http://www.xmethods.net 27
WSDL: Wofür WSDL? • Zur reinen Kommunikation reicht SOAP aus • Wie soll man aber wissen, welche Methoden ein Web-Service bietet? • Wir brauchen daher eine Beschreibung des Dienstes und eine Beschreibungssprache! 28
Konzept der WSDL • Beschreibt einen Web-Service, genauer: • Beschreibt die anwendungsspezifischen Teil, der innerhalb einer SOAP-Nachricht verschickt wird • Die Implementierung des Kommunikationssystem soll automatisch erstellt werden (Maschine redet mit Maschine) • XML-Dokument mit einem • abstrakten Teil: • Name des Dienstes • Beschreibung der ausgehenden und eingehenden Nachrichten • Konkreten Teil: • Beschreibung der Protokollbindung • Adresse des Dienstes 29
Wo wird die WSDL eingesetzt? WSD Web-Service-Verzeichnis Finden Publizieren WSD Web-Service-Anbieter Web-Service-Nutzer Interaktion SOAP • Interaktionsmodell 30
WSDL: Aufbau • Grundstruktur der WSDL-Datei: Name des Dienstes, Namensräume, verwendete Standards definitions Datentypen-Definitionen types Nachrichten-formate (In-Out) message Schnittstellen-beschreibung mit Hilfe von definierten Mustern portType binding Beschreibt die Bindung: Operationen einer definierten Schnittstelle (interface) Endpunkte und Beschreibung des Dienstanbieters service 31
WSDL: Aufbau • Beispiele: • Google : http://api.google.com/GoogleSearch.wsdl • Amazon: http://soap.amazon.com/schemas2/AmazonWebServices.wsdl • Vascoda: http://vifphys.tib.uni-hannover.de/WebServices/VASCODA/vascoda.wsdl 32
UDDI • UDDI = Universal Description, Discovery and Integration • UDDI ist ein Verzeichnisdienst und dient dazu Web-Services zu finden • Konzept: Web-Services sollen vom Service-Anbieter im Verzeichnis publiziert und vom Service-Konsumenten im Verzeichnis gefunden werden • Ähnlich wie LDAP aber auf Web-Services zugeschnitten (es gibt Bemühungen, LDAP mit UDDI zusammenzubringen) • Gründer: Ariba, IBM und Kleinstweich • Beispiel: http://uddi.microsoft.com 33
UDDI: Aufbau Möglichkeit 1: Meldet direkt an UDDI-Operator 1 Möglichkeit 2: Meldet an Möglichkeit 3: Meldet beim privatem Verzeichnis UDDI-Operator 2 Trägt ein Privates UDDI-Verzeichnis Firmen bieten öffentliche UDDI-Operatoren an z.B. IBM, SAP UDDI Operator Council regelt, wer zum UBR gehören darf Service-Anbieter Universal Business Registry Datenabgleich über GUIDs Registrar 34
Abschließende Worte • Muss ich SOAP und WSDL jemals selbst anfassen? • Man kann Web-Services implementieren, ohne jemals einen Blick auf die WSDL-Beschreibung oder auf SOAP-Datenpakete geworfen zu haben • Es gibt eine Reihe von Werkzeugen, die uns die Arbeit abnehmen • Aber: • Für das Konzipieren von Web-Services ist es wichtig die dahinterliegenden Mechanismen zu kennen (auch die Frage, ob ich überhaupt meine Anwendung als Web-Serice konzipieren möchte) • Debuggen wird leichter • Für die Entwicklung von Web-Service-Konsumenten muss man die WSDL-Beschreibung zumindest lesen können, um besser zu verstehen, wie die Software-APIs verwendet werden müssen 35
SOAP Quiz • SOAP ist ein Akronym für? • SOAP braucht man für? • Wo finde ich die SOAP-Spezifikationen? • Bestandteile einer SOAP-Nachricht? • Welche Protokoll-Standards kann ich verwenden um eine SOAP-Nachricht zu transportieren? • Welche Übermittlungsarten werden von SOAP unterstützt? • Wofür brauche ich Encoding? • Wer war der Erfinder von XML-RPC? • Bestandteile des Webservices? • Wo liegen die WSDs? 36
SOAP in der Praxis • SOAP wurde für den Nachrichtenaustausch für Web-Services entwickelt! • Austausch von Nachrichten zwischen Dienstnutzer und Dienstanbieter • Die Nachrichten sollen auch in einem heterogenen Umfeld ausgetauscht werden können • Das Nachrichtenformat ist XML • Es soll "transportabel" sein, d.h. Transportprotokolle wie HTTP, SMTP, TCP, POP3, Jabber müssen in der Lage sein, die Nachrichten transportieren zu können. 37
SOAP in der Praxis • Der Weg zum eigenen Web-Service mit SOAP 38
SOAP mit PHP • SOAP-Implentierungen für PHP • SOAPx4: Urgroßmutter der PHP-Implementierungen. Bildet die Basis für andere Implementierungen. • NuSOAP: Weiterentwicklung von SOAPx4 • PEAR::SOAP: Weiterentwicklung von SOAPx4 • ez SOAP: SOAP-Implementierung für das CMS eZ Publish • PHP-SOAP: C-basierte PHP-Erweiterung • SWSAPI: Einfache API für Web-Services auf Basis von SOAPx4 • Krysalis: Framework für Web-Services auf der Basis von XSLT 39
SOAP mit PHP • Welche API sollen wir nehmen? • PEAR::SOAP wird zur Zeit am aktivsten entwickelt und ist das beliebteste SOAP-Paket. • Sämtliche Versionen nur im Beta-Status! • NuSOAP: Man findet viele Einführungen zu SOAP mit PHP in denen NuSOAP verwendet wird. • Probleme mit der Fehlerrückgabe! • PHP-SOAP: Unterstützt SOAP1.1/1.2 und WSDL 1.1 • Die restlichen Pakete führen ein Nischendasein 40
SOAP mit NuSOAP • Wie nutze ich die API? • NuSOAP besteht aus einer ZIP-Datei, die die Datei nusoap.php enthält. • Nicht schön: SOAP-PHP und NuSOAP verwenden den gleichen Klassennamen "soapclient". Um NuSOAP und SOAP-PHP gleichzeitig verwenden zu können, muss man in der Datei nusoap.php alle Einträge mit "soapclient" durch "soapclient<irgendetwas>" austauschen. • Diese Datei muss nur noch integriert eingebunden werden: • require_once "nusoap.php" 41
PHP-SOAP • Wie nutze ich die API? • Um die Erweiterung nutzen zu können, muss PHP mit der Option -enable-soap konfiguriert werden. • http://de.php.net/manual/de/ref.soap.php 42
PHP-SOAP • Beispiele zum ausprobieren: • Einfacher Web-Service-Anbieter + -Konsument • Web-Service-Anbieter Server mit Parametern + Web-Service-Konsument • Web-Service-Anbieter mit Parameter und Fehlerrückgabe (fault) + Web-Service-Konsument • Web-Service-Konsument mit Debugging 43
SOAP mit PEAR::SOAP • Wie nutze ich die API? • PEAR::SOAP wird mit dem PEAR-Framework installiert, diese ist ein wenig tricky: PEAR installieren pear install channel-update pear.php.net pear install Net_Socket pear install -f Net_DIME pear install Net_URL pear install HTTP_Request pear install Mail_Mime pear install channel://pear.php.net/SOAP-0.10.1 • PEAR::SOAP wird z. B. require_once "SOAP/Server.php" um einen Web-Service zu erstellen 44
SOAP mit PEAR::SOAP • Beispiele zum ausprobieren: • Einfacher Web-Service-Anbieter/Konsument • Web-Service-Anbieter/Konsument mit Parametern • Web-Service-Anbieter/Konsument mit komplexen Datentypen 45
WSDL • WSDL mit PEAR::SOAP 46