Seminar Praktische Informatik Web Services Norman Thomas 27. November 2003
Übersicht Einleitung SOAP WSDL UDDI Beispiel Struktur Datentypen Benutzung
Definition Web Services sind eine im Internet veröffentlichte Software, die ihren Dienst anbietet und über XML-basierte Standardschnittstellen angesprochen wird.
Übersichtsplan UDDI Benutzer Anbieter SOAP SOAP SOAP Finden Eintragen Benutzen des WS WSDL
CORBA DCOM RMI Anwendungsbeispiel Anbieter Server Kunde 1 Kunde 2 OS: Windows Sprache: VB Kunde 2 OS: Mac OS Sprache: Java Anbieter CORBA DCOM RMI Server Kunde 3 OS: Linux Sprache: Python CORBA-IDL Kunde 4 OS: UNIX Sprache: C++
Lösungen (1) RMI DCOM CORBA Nur auf Java beschränkt Dafür sämtliche Java-fähige Plattformen DCOM Nur auf Windows beschränkt Dafür programmiersprachenunabhängig CORBA Viele Plattformen Viele Programmiersprachen ORBs sind jedoch nicht sehr einheitlich, deshalb werden nicht auf allen Plattformen alle Sprachen unterstützt
Lösungen (2) Eventuelle Lösung HTML parsen und Benutzer simulieren Scheint u.U. einfacher zu sein als es ist! Probleme: Parsen ist aufwändig Änderung des Layouts → Parser anpassen Bei Änderungen ist der alte Parser auf keinen Fall weiter nutzbar Dienste werden erweitert → Parser anpassen Verteilung des neuen Parsers an alle Kunden Man muss warten bis alle Kunden umgestellt haben
Lösungen (3) HTTP (HTML) und CORBA boten die besten Lösungen, wenn auch jedes für sich unvollkommen Kombination beider Techniken! HTTP als Transport-Protokoll CORBA-IDL ähnliches Verfahren zum Beschreiben der Fähigkeiten Ergebnis: Web Services
Übersichtsplan UDDI Benutzer Anbieter SOAP SOAP SOAP Finden Eintragen Benutzen des WS WSDL
UDDI Client Server HTTP server SOAP HTTP server Web Service SOAP WebApp Business Logic DB Client Server HTTP server Web Service SOAP
SOAP Basiert auf XML Aktuelle Version 1.2 seit Juni 2003 SOAP dient zum Nachrichtenaustausch Benötigt keine exotischen offenen Ports, da es auf Basis von HTTP, SMTP, etc. operieren kann
SOAP-Struktur <!– Header --> <SOAP:Header> <?xml version=„1.0“ encoding=„UTF-8“?> <SOAP:Envelope xmlns:SOAP= „http://www.w3.org/2003/05/soap-envelope“> </SOAP:Envelope> <!– Header --> <SOAP:Header> </SOAP:Header> <!– Body --> <SOAP:Body> </SOAP:Body>
SOAP-Envelope Ist „Umschlag“ einer SOAP-Nachricht Ist Root-Element der SOAP-Nachricht (des XML-Dokuments) In „xmlns:SOAP“ wird die verwendete Version von SOAP angegeben (der Link aus dem Beispiel ist für SOAP 1.2)
SOAP-Header Ist optional Falls er angegeben wird muss er vor dem SOAP-Body stehen Im Header können Daten angegeben werden, die nicht zur eigentlichen Nachricht gehören (z.B. Authentisierungsdaten) Versteht der Empfänger den Header nicht, weiß also nicht die Daten auszuwerten, so wird der Header einfach verworfen
SOAP-Header (Code) <SOAP:Header> <auth:authentication xmlns:auth=„http://irgendwas.com/auth“> <auth:user>norman</auth:user> <auth:pass>webservices</auth:pass> </auth:authentication> </SOAP:Header>
SOAP-Body Hier steht die eigentliche Nachricht mit Methodenaufrufen Parameterübergaben Rückgabewerten (Antworten von Methoden) Fehlermeldungen
Java-Code public String sayHello( String name ) { return „Hello “ + name; }
SOAP-Body (Code) <SOAP:Body> <anfrage:sayHello xmlns:anfrage=„http://irgendwas.com/anfrage“ SOAP:encodingStyle=„http://schemas.xmlsoap.org/SOAP/encoding/“> <name>Norman</name> </anfrage:sayHello> </SOAP:Body> Methode Parametername Parameterwert
SOAP-Body (Code) <SOAP:Body> <anfrage:sayHelloResponse xmlns:anfrage=„http://irgendwas.com/anfrage“ SOAP:encodingStyle=„http://schemas.xmlsoap.org/SOAP/encoding/“> <result>Hello Norman</result> </anfrage:sayHelloResponse> </SOAP:Body> Methode Parametername Parameterwert
SOAP-Fault Hierhin gehören Fehlermeldungen Fehlermeldungen werden charakterisiert durch: faultcode (VersionMismatch, MustUnderstand, Client, Server) faultstring faultfactor (Knoten, wo Fehler auftrat) details Befinden sich in der Umgebung <SOAP:Fault> innerhalb des SOAP-Body‘s
SOAP & Datentypen SOAP verwendet Standard-XML-Typen Bei komplexen Typen wie Arrays oder Strukturen kann man eigene Typen definieren
Arrays <anfrage:searchZIPResponse xmlns:anfrage=„…“ SOAP:encodingStyle=„…“> <result href=„id0“/> </anfrage:searchZIPResponse> <id0 id=„id0“ SOAPenc:root=„0“ xsi:type=„SOAPEnc:Array“ SOAPEnc:arrayType=„xsd:string[2]“> <i xsi:type=„xsd:string“>Cambria Hts.</i> <i xsi:type=„xsd:string“>Baldwin</i> </id0>
Struktur <anfrage:searchAddressResponse xmlns:anfrage=„…“ SOAP:encodingStyle=„…“> <result href=„id0“/> </anfrage:searchAddressResponse> <id0 id=„id0“ SOAPenc:root=„0“ xsi:type=„ns1:Adresse“> <strasse xsi:type=„xsd:string“>Mozartstr. 1</strasse> <plz xsi:type=„xsi:string“>34117</plz> <ort xsi:type=„xsi:string“>Kassel</ort> </id0>
WSDL Web Service Description Language XML-basiert WSDL beschreibt Web Services Aus WSDL lassen sich Code-Gerüste generieren Aktuelle Version ist 1.1, jedoch sind 1.2 und 2.0 in Arbeit Noch kein offizieller W3C-Standard wie SOAP Alternativen: RDF, DAML
WSDL – Struktur <definitions> <documentation> <types> <documentation> <import> <message> <part> <binding> <service> <port> <portType> <operation> <portType> listet alle Operationen eines Web Services auf. Dazu dienen die <operation>-Elemente, die als Attribut „name“ den Namen der Funktion haben. <operation> hat wiederum Unterelemente, und zwar <input>, <output> und <fault>. <documentation> und <import> sind optional. In <documentation> kann eine textuelle Beschreibung der WSDL und des Dienstes stehen. Mit <import> kann man WSDL-Dokumente modular aufbauen und so WSDL-Teile importieren <types> ist ebenfalls optional. Werden jedoch eigens definierte Datentypen z.B. Strukturen verwendet, dann müssen sie hier definiert werden, damit sie in SOAP verwendet werden können. In <message> werden mittels der <part>-Unterelemente die Funktionen mit deren Attributen und Rückgabewerten aufgelistet, wobei <message> das Attribut „name“ hat, das den Namen der Funktion erhält und <part> mit dem Attribut „name“ den Namen des Parameters und mit „type“ den Typen des Parameters festlegt. Gibt es mehrere Parameter dann muss man mehrere <part>-Elemente verwenden
WSDL-Operation
WSDL-binding & service <binding> legt fest über welche Transportwege die Kommunikation laufen kann (SOAP, HTTP GET/POST, MIME, …) „type“-Attribut verweise auf ein portType In <service> werden <port>-Elemente zusammengefasst Attribut „binding“ verweist auf <binding>-Elemente Das Unterelement <port> enthält wieder ein Unterelement <SOAP:address> bzw <HTTP:address>, das ein Attribut „location“ mit der URL des Services besitzt.
UDDI Universal Description, Discovery Integration UDDI ist kein W3C-Standard Katalog bzw. Suchmaschine für Web Services Anbieter registriert seinen Web Service am UDDI Registry Anwender sucht im UDDI Registry nach Web Services Basiert ebenfalls au XML Alternative: WSIL
Übersichtsplan UDDI Benutzer Anbieter SOAP SOAP SOAP Finden Eintragen Benutzen des WS WSDL
UDDI – Publisher & Requestor Publizieren Mit „delete“ beginnende Befehle dienen dem Löschen Mit „save“ beginnende Befehle dienen dem Speichern Abfragen Mit „find“ beginnende Befehle suchen und browsen durch das Verzeichnis Mit „get“ beginnende Befehle dienen dem Abrufen von Details
UDDI Publisher Requestor add_publisherAssertions, set_publisherAssertions, get_publisherAssertions, delete_publisherAssertions, get_assertionStatusReport save_business, delete_business save_service, delete_service save_tModel, delete_tModel get_registeredInfo Requestor find_business, get_businessDetail, get_businessDetailExt find_relatedBusiness find_service, get_serviceDetail find_tModel, get_tModel
Ausblick Nutzung von Web Services zur Integration von Google, Amazon, Babelfish, etc. in eigene Applicationen Nutzung von Web Services zum Grid Computing
Web Service Sicherheit Application Layer SOAP WS-Trust WS-Security Policy WS-Policy WS-Security XML XML Signature XML Encryption HTTP, FTP, SMTP, … SSL TCP/IP Transport Layer
Quellen (1) Perspectives on Web Services, Applying SOAP, WSDL and UDDI to Real-World Projects. Olaf Zimmermann, Mark Tomlinson, Stefan Peuser. Springer Verlag Web Services – kompakt. Michael Kuschke, Ludger Wölfel. Spektrum Verlag
Quellen (2) http://www.w3schools.com/soap/default.asp http://www.w3schools.com/w3c/w3c_soap.asp http://www.w3schools.com/wsdl/default.asp http://www.w3schools.com/w3c/w3c_wsdl.asp http://www-106.ibm.com/developerworks/webservices/ http://www6.software.ibm.com/developerworks/education/ws-dewsdl/ws-dewsdl-a4.pdf http://www.topxml.org/soap/articles/soapservices/default.asp
Quellen (3) www.xmethods.net www.salcentral.com