Web-Services Grundlagen Praktikum Informationsintegration 1.11.2005 Agenda Aktueller Stand Was sind Web-Services? Allgemeines Web-Service-Technologien SOAP WSDL 2
Umgebung (Korrektur) Rechner/Server mangold.informatik.hu-berlin.de Erreichbar innerhalb der Uni (außer WLan) Oder per SSH-Tunnel über star/fink/ (siehe Wiki) Installiert ist Eclipse 3.1 + SVN-Plugin Java 5 (statt 1.4) Tomcat 5.5 (statt 5.0) JWSDP 1.6 (von Sun) Immer noch DB2 8.2 SVN-Repository /local/repository Hilfsklassen in /local/repository/search 3 Abgabe 18 sind schon auf der Liste Noch nicht alle Namen bei den Fotos In Liste: Suchmaschinen-WIKI-Seite verlinken, nicht Suchmaschinen-WEB-Seite Bitte Zugriff auf mangold testen 4
Bisher, Teil 1 Anfrage Ergebnis Suchmaske Suchmaschine Teil 1 Suchmaske ausfüllen (Anfrage stellen), Ergebnisseite lesen Index 5 Jetzt, Teil 2+3 Programm, Service Anfrage Ergebnis Suchmaske Suchservice Anfrage Ergebnis Suchmaschine Teil 2 Service anbieten, Anfrage durch Programm/Service Index 6
Szenario, Phase 1+2 Phase 2 Phase 1 7 Integrationsebenen (1) Präsentationsebene Präsentationsfragmente Portlets Praktikum Prozeßebene Anwendungslogikebene Informationsebene Dienste Dienstschnittstelle, -semantik Dienstfindung, -orchestrierung Vorlesung Informationsquellen Datenmodell, Schema, semantische Heterogenität Technische Ebene Netzwerkprotokolle, RPC Darstellungssyntax 8
Integrationsebenen (2) Bislang: Informationsperspektive Einzubindende Anbieter sind Informationsquellen Interaktion mit den externen Quellen läuft über das Anfrage-Ergebnis-Paradigma Es existiert eine zentrale Stelle, an der alle Informationen zusammenlaufen Hauptprobleme Wie überwinde ich die technische Heterogenität? Wie überwinde ich die semantische Heterogenität? Anfrageübersetzung Schemaintegration Vorlesung und Praktikum letztes Jahr 9 Integrationsebenen (2) Jetzt: Dienstintegration Einzubindende Anbieter sind Dienste Kapselung von Daten und Funktionalität hinter einer Schnittstelle, die die Funktion eines Vertrages hat Dienst-/Methodenaufrufe vom Dienstnehmer an den Dienstgeber als Interaktionsparadigma Autonomen Dienste soll durch eine Infrastruktur die gegenseitige Nutzung ermöglicht werden => Dienstorientierte Architekturen Hauptprobleme Wie mache ich Dienste interoperabel? Wie finde ich benötigte Dienste? Wie beschreibe ich Dienste? Wie kombiniere/aggregiere ich Dienste? Praktikum letztes und dieses Jahr 10
Dienstorientierte Architektur Buzzword: SOA Dienstverzeichnis (service registry) find publish Dienstnehmer (service requestor, client) bind invoke Dienstgeber (service provider, server) 11 Was sind Web Services? Web Services sind verteilte, lose gekoppelte und wieder verwendbare Software-Komponenten, auf die über Standard-Internetprotokolle programmatisch zugegriffen werden kann. Pragmatisch: Dienste, die mittels SOAP angesprochen werden können und (meist) mittels WSDL beschrieben werden 12
Was sind Web Services? Folie von Prof. Reisig auf dem HU-IBM Kooperationstag Programm Ein Programm rechnet Service Ein Dienst kommuniziert 13 Geschichte 1997/98 stark von Microsoft dominierte Entwicklung, die aber zunächst aufgrund anderer Prioritäten (XML Data u.a.) verschoben wurde 1999 SOAP 1.0 Hinzukommen von IBM 2000 offizielle Submission von SOAP 1.1 ans W3C Gründung der XML Protocol Arbeitsgruppe am W3C UDDI-Spezifikation (Ariba, IBM, Microsoft) 2001 WSDL Submission 2002 BPEL4WS (IBM, Microsoft) aus WSFL und XLANG 2003 SOAP 1.2, WSDL 2.0 Working Draft 14
Technik SOAP (Simple Object Access Protocol) Aufrufprotokoll unterschiedliche Transportprotokolle: HTTP, SMTP WSDL (Web Services Description Language) Schnittstellenbeschreibung UDDI (Universal Description, Discovery and Integration) Dienstbeschreibung und Auffindung universeller Verzeichnisdienst für Dienstleistungen 15 SOAP, WSDL, UDDI Registry UDDI UDDI UDDI Client SOAP WSDL Web Service 16
SOAP Überblick In XML kodierter entfernter Methodenaufruf (RPC) bzw. Nachrichtenaustauschprotokoll Beliebiges Transportprotokoll, z.b. synchrone Aufrufe über HTTP: Aufrufer wartet auf die Dienstantwort klassischer RPC asynchrone Aufrufe über SMTP (Mail): Entkopplung von Aufruf und Antwort Messaging Kodierungsregeln für Datentypen Standard-Regeln entstammen XML Schema 17 Nachricht SOAP-Envelope SOAP-Header z.b. Authentifizierung, Routing, Logging, Transaktionsnummern Metadaten über den Aufruf SOAP-Body die eigentliche Methode, die aufgerufen werden soll die Parameter bzw. die ausgetauschte Nachricht 18
SOAP Beispiel Aufruf Antwort <soap:envelope> <soap:body> <xmlns:m="http://www.stock.org/stock" /> <m:getstockprice> <m:stockname>ibm</m:stockname> </m:getstockprice> </soap:body> </soap:envelope> <soap:envelope> <soap:body> <xmlns:m="http://www.stock.org/stock" /> <m:getstockpriceresponse> <m:price>34.5</m:price> </m:getstockpriceresponse> </soap:body> </soap:envelope> 19 WSDL Überblick Welche Operationen bietet der Dienst an? Welche Parameter haben die Operationen Struktur der Aufrufnachricht Struktur des Ergebnisses Rückgriff auf XML Schema Wo und wie kann ich einen Dienst erreichen? Adresse Informationen über das Protokoll z.b. SOAP, auch mehrere Protokolle! verwendetes Transportprotokoll: HTTP, SMTP etc. aber: keine semantische Dienstbeschreibung 20
WSDL Aufbau Port Port Port SOAP-Binding andere Protokollbindung Operationen (Abstrakte Schnittstelle, PortType) mit ihrer Signatur Messages + Schema Definition von Datenstrukturen 21 WSDL Beispiel <definitions> <types> <xsd:schema> Typdefinitionen </xsd:schema> </types> <message name="..."> Nachrichtendefinition </message> <porttype name="..."> <operation> <input message="..."/> <output message="..."/> </operation> </porttype> <binding name="..."> <operation name="..."><input><soap:body...></input></operation> </binding> <service name="..."> <port name="..." binding="..."> <soap:address location="..." /> </port> </service> </definitions> 22
Typdefinitionen <definitions name="googlesearch targetnamespace="urn:googlesearch. > <types> <xsd:schema xmlns="http://www.w3.org/2001/xmlschema" targetnamespace="urn:googlesearch"> Eingebettete XML Schema- Definitionen! <xsd:complextype name="resultelement"> <xsd:all> <xsd:element name="summary" type="xsd:string"/> <xsd:element name="url" type="xsd:string"/> <xsd:element name="snippet" type="xsd:string"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="cachedsize" type="xsd:string"/> <xsd:element name="relatedinformationpresent" type="xsd:boolean"/> <xsd:element name="hostname" type="xsd:string"/> <xsd:element name="directorycategory" type="typens:directorycategory"/> <xsd:element name="directorytitle" type="xsd:string"/> </xsd:all> </xsd:complextype> 23 Typdefinitionen (2) <xsd:complextype name="resultelementarray"> <xsd:complexcontent> <xsd:restriction base="soapenc:array"> <xsd:attribute ref="soapenc:arraytype wsdl:arraytype="typens:resultelement[]"/> </xsd:restriction> </xsd:complexcontent> </xsd:complextype> <xsd:complextype name="googlesearchresult"> <xsd:all> <xsd:element name="resultelements" <xsd:element name="searchquery" </xsd:all> </xsd:complextype> </xsd:schema> </types> Spezieller Typ für Arrays! type="typens:resultelementarray"/> type="xsd:string"/> 24
Nachrichten <message name="dogooglesearch"> <part name="key" type="xsd:string"/> <part name="q" type="xsd:string"/> <part name="start" type="xsd:int"/> <part name="maxresults" type="xsd:int"/> <part name="filter" type="xsd:boolean"/> <part name="restrict" type="xsd:string"/> <part name="safesearch" type="xsd:boolean"/> <part name="lr" type="xsd:string"/> <part name="ie" type="xsd:string"/> <part name="oe" type="xsd:string"/> </message> Mehrere Teile, pro Teil ein Schematyp <message name="dogooglesearchresponse"> <part name="return" type="typens:googlesearchresult"/> </message> 25 Operationen Schnittstellendefinition Name der Methode, Eingabe- und Ausgabeparameter Fehlerbehandlung <fault name="..." message="..."> <porttype name="googlesearchport"> <operation name="dogooglesearch"> <input message="typens:dogooglesearch"/> <output message="typens:dogooglesearchresponse"/> </operation> </porttype> 26
Protokollbindung <binding name="googlesearchbinding" type="typens:googlesearchport"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="dogooglesearch"> <soap:operation soapaction="urn:googlesearchaction"/> <input> <soap:body use="encoded" namespace="urn:googlesearch" encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="urn:googlesearch" encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> 27 Ports Festlegen der konkreten Netzwerkadresse <service name="googlesearchservice"> <port name="googlesearchport" binding="typens:googlesearchbinding"> <soap:address location="http://api.google.com/search/beta2"/> </port> </service> 28
Ausblick Nächste Woche: Web-Services: Implementierung 1. Abgabetermin: 6.11.2005 Suchmaschine beschreiben HTML Seiten parsen Fragen? 29