Post on 03-Jan-2016
description
Franck Borel - UB-Freiburg
SOAP-Kurs
Einführung und praktische Beispiele
2Franck Borel - UB-Freiburg
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
3Franck Borel - UB-Freiburg
Ü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
4Franck Borel - UB-Freiburg
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?
5Franck Borel - UB-Freiburg
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
6Franck Borel - UB-Freiburg
Web-Services: Die Idee
Anwendungs-programm Web-Service Web-Service-
Nutzer
Plattform- und sprachspezifische Kommunikation
Plattform- und sprachunabhängige Kommunikation
7Franck Borel - UB-Freiburg
Was ist ein Web-Service?
Anwendungs-programm Service-Proxy Service-Listener
Web-Anwendungsserver
8Franck Borel - UB-Freiburg
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
9Franck Borel - UB-Freiburg
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
10Franck Borel - UB-Freiburg
Web-Services: Konzept
Web-Service Protokollstapel (siehe auch W3C)
Ebene Protokolle
Entdeckung
Beschreibung
Verpackung
Transport
Netzwerk
UDDI, DISCO, WSIL, ebXML
WSDL, RDF, ebXML
SOAP, XML-RPC
HTTP, SMTP, FTP, BEEP…
TCP/IPVerpackt die
Nutzdaten
Verpackt die Nutzdaten
Beschreibung der verpackten Nutzdaten
Beschreibung der verpackten Nutzdaten
Namensdienst für Web-Services: Auffinden
von WSDL zu interessierenden Web-
Services
Namensdienst für Web-Services: Auffinden
von WSDL zu interessierenden Web-
Services
11Franck Borel - UB-Freiburg
Web-Services: Interaktionsmodell
• Interaktionsmodell basiert auf SOA (Service Oriented Architecture)
Interaktion
Finden
Web-Service-Verzeichnis
Publizieren
Bietet Dienst nach außen hin
an
Bietet Dienst nach außen hin
an
WSD
Dienst wird in einem WSD-
Dokument beschrieben und beim Service-Verzeichnis registriert
Dienst wird in einem WSD-
Dokument beschrieben und beim Service-Verzeichnis registriert
Web-Service-Anbieter
Web-Service- Nutzer
Muss WSD kennen, damit er korrekt auf
den Dienst zugreifen
kann
Muss WSD kennen, damit er korrekt auf
den Dienst zugreifen
kann
Verfügbare Dienste
Verfügbare Dienste
WSD
Web Service Description
Web Service Description
SOAP
NutzdatenNutzdaten
12Franck Borel - UB-Freiburg
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.
13Franck Borel - UB-Freiburg
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;?>
14Franck Borel - UB-Freiburg
Web-Services: Alternativen
• CORBA (Common Object Request Broker Architecture)
• REST (Representional State Transfer)
• Remoting: .NET Remoting, Java RMI
• EDI (Electronic Data Interchange)
15Franck Borel - UB-Freiburg
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
16Franck Borel - UB-Freiburg
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.
17Franck Borel - UB-Freiburg
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
18Franck Borel - UB-Freiburg
SOAP: Nachrichtenformat
Transportprotokoll (HTTP)
SOAP-Envelope
SOAP-HeaderHeaderblock
Headerblock
SOAP-Body
Nachricht
Dient zur Angabe von Informationen, die nicht direkt als Anwendungsdaten zu klassifieren sind (z. B. Transaktions-
nummer) .Der Header ist optional!
Wurzelelement und Namensraum.
Obligatorisch
Anwendungs-spezifischer Teil
Transportiert die Anwendungsdaten.
Obligatorisch
19Franck Borel - UB-Freiburg
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)
SOAP-Nachricht
Namensraum für den anwendung-spezifschen Teil
SOAP-Nachrichten verwenden einen eigenen Namensraum für alle Tags, die zum
Envelope gehören (hier env)
20Franck Borel - UB-Freiburg
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
21Franck Borel - UB-Freiburg
SOAP: Übermittlung
• Dialogorientierte MEP– Nachrichten werden in einer
Richtung zwischen den SOAP-Knoten ausgetauscht
– asynchron
• RPC-MEP– Anfrage-Antwort – synchron
NachrichtSender Empfänger
Sender EmpfängerAntwort
Anfrage
22Franck Borel - UB-Freiburg
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
23Franck Borel - UB-Freiburg
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
24Franck Borel - UB-Freiburg
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
25Franck Borel - UB-Freiburg
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!
26Franck Borel - UB-Freiburg
SOAP: Aufbau
Funktionalität Version 1.1 Version 1.2
Spezifikation 1 Teil 3 Teile
Namensraum http://schemas.xmlsoap.org/soap/envelope
http://www.w3.org/2003/05/soap-envelope
Encoding Frei wählbar. Spezifikation:
http://schemas.xmlsoap.org/soap/encoding
Frei wählbar. Spezifikation aktualisiert: http://www.w3.org/2003/05/soap-encoding
Intermediäre und Nachrichten-verteilung
Actor-Attribut Intermediäre sind SOAP-Knoten, die Rollen annehmen. SOAP 1.2 reguliert die Nachrichten-Weiterleitung exakter
Fehler-Management
Fehler enthält vier Elemente. Der Fehlercode gibt die Art des Fehlers aus.
Vollständig überarbeitet. Neue Fehlercode!
Elemente nach dem SOAP-Body
SOAP 1.1 erlaubt Elemente nach dem SOAP-Body
SOAP 1.2 untersagt Elemente nach dem SOAP-Body
Binding Beschreibung der Bindung an HTTP Allgemeine Spezifikation zur Bindung an andere Protokolle
27Franck Borel - UB-Freiburg
Web-Service: Beispiel
• Im Browser bitte folgende URL eingeben:– http://www.xmethods.net
28Franck Borel - UB-Freiburg
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!
29Franck Borel - UB-Freiburg
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
30Franck Borel - UB-Freiburg
Wo wird die WSDL eingesetzt?
• Interaktionsmodell
Web-Service-Anbieter
Web-Service-Verzeichnis
Web-Service-Nutzer
Interaktion
Finden Publizieren
WSD
WSD
SOAP
31Franck Borel - UB-Freiburg
WSDL: Aufbau
definitions
types
message
portType
binding
service
•Grundstruktur der WSDL-Datei:
Datentypen-Definitionen
Name des Dienstes, Namensräume,
verwendete Standards
Nachrichten-formate (In-Out)
Schnittstellen-beschreibung mit
Hilfe von definierten
Mustern Beschreibt die Bindung:
Operationen einer definierten
Schnittstelle (interface)
Endpunkte und Beschreibung des Dienstanbieters
32Franck Borel - UB-Freiburg
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
33Franck Borel - UB-Freiburg
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
34Franck Borel - UB-Freiburg
UDDI: Aufbau
Service-AnbieterUniversal Business Registry
Registrar
UDDI-Operator 1
Möglichkeit 1: Meldet direkt an
Möglichkeit 2: Meldet an
UDDI-Operator 2Trägt ein
Datenabgleich über GUIDs
Privates UDDI-Verzeichnis
Möglichkeit 3: Meldet beim privatem Verzeichnis
Firmen bieten öffentliche UDDI-Operatoren an z.B. IBM, SAP
Firmen bieten öffentliche UDDI-Operatoren an z.B. IBM, SAP
UDDI Operator Council regelt, wer zum UBR
gehören darf
UDDI Operator Council regelt, wer zum UBR
gehören darf
35Franck Borel - UB-Freiburg
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
36Franck Borel - UB-Freiburg
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?
37Franck Borel - UB-Freiburg
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.
38Franck Borel - UB-Freiburg
SOAP in der Praxis
• Der Weg zum eigenen Web-Service mit SOAP
39Franck Borel - UB-Freiburg
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
40Franck Borel - UB-Freiburg
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
41Franck Borel - UB-Freiburg
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"
42Franck Borel - UB-Freiburg
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
43Franck Borel - UB-Freiburg
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
44Franck Borel - UB-Freiburg
SOAP mit PEAR::SOAP
• Wie nutze ich die API? – PEAR::SOAP wird mit dem PEAR-Framework installiert, diese
ist ein wenig tricky:PEAR installierenpear install channel-update pear.php.netpear install Net_Socketpear install -f Net_DIMEpear install Net_URLpear install HTTP_Requestpear install Mail_Mimepear 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
45Franck Borel - UB-Freiburg
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
46Franck Borel - UB-Freiburg
WSDL
• WSDL mit PEAR::SOAP