27
WS 13/14 ALP 5 - Web-Dienste 1 13 Web-Dienste 13.1 Prinzipien 2 13.2 Web-Dienste mit Java 6 13.3 WSDL 16 13.4 REST 23 Zusammenfassung 26 Klaus-Peter Löhr

13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 1

13 Web-Dienste!

13.1 Prinzipien ! ! !2!13.2 Web-Dienste mit Java ! !6!13.3 WSDL ! ! ! !16!13.4 REST ! ! ! !23!Zusammenfassung ! ! !26 !!

Klaus-Peter Löhr!

Page 2: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 2

13.1 Prinzipien!

Web-Dienste (Web Services):

Ø  fernaufrufbare Dienste, vermittelt über Web Server (keine GUI, kein Browser)

Ø  Datenformat: SOAP (XML-basiert), JSON oder andere

Ø  Schnittstellenbeschreibung: WSDL (XML-basiert)

Ø  unabhängig von Programmiersprachen (vgl. DCE/CORBA!)

( à„Dienstorientierte Architektur“, service-oriented architecture - SOA)

Page 3: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 3

Klient K (Sprache X)

Dienst D (Sprache Y)

WSDL für D

SOAP-Bibliothek für X

WSDL für D

SOAP-Bibliothek für Y

Netz

HTTP (oder FTP ...) HTTP (oder FTP ...)

Page 4: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 4

Bereitstellung eines Web-Dienstes (deployment):

Ø  in geeignetem Server (Tomcat, GlassFish, MS IIE, ...),

Ø  unter identifizierender URL („service endpoint“),

Ø  Werkzeuge zur Codegenerierung zusätzlich zum Anwendungscode einsetzen,

Ø  Spezifikation veröffentlichen: Schnittstellenbeschreibung (plus Semantik: WSDL-S), z.B. über UDDI (Universal Description, Discovery and Integration)

Page 5: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 5

Benutzung eines Web-Dienstes:

Ø  URL in Erfahrung bringen - evtl. über UDDI .

Ø  Schnittstelle in Erfahrung bringen, §  evtl. über UDDI, §  evtl. mit Web Browser,

z.B. http://wuhan.imp.fu-berlin.de:44711/sysprop1?wsdl (VPN!).

Ø  Werkzeuge zur Codegenerierung zusätzlich zum Anwendungscode einsetzen.

Page 6: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 6

13.2 Web-Dienste mit Java!

Ø  JAX-WS ist die „Java API for XML-based Web Services“

Ø  JAX-WS RI ist die zugehörige Reference Implementation

Ø  Web Resources Framework (WSRF) für zustandsbehaftete Dienste

Ø  Pakete beginnen mit javax: javax.jws Annotationen

!! !javax.jws.soap Annotationen !! !javax.xml.ws Schnittstellen und Klassen ... weitere

Page 7: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 7

Zur Erinnerung: Java-Annotationen

Ø  Annotationen sind Zusätze zu normalem Programmtext

Ø  Syntax: @identifer [ name-value-list ]

Ø  Semantik des umgebenden Codes wird nicht verändert, aber das Verhalten von Werkzeugen wird beeinflusst.

Ø  Annotationen mit retention-Eigenschaft werden der übersetzten Klasse als Metadaten beigegeben, die auch mittels Reflexion greifbar sind.

Ø  Beispiele: §  @override !(keine Metadaten) §  @WebService

Page 8: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 8

Beispiel: Dienst Sysprop Dieser Dienst liefert Informationen über seine Umgebung

und teilt mit, wie oft er aufgerufen wurde. package sysprop;! // diverse Annotationstypen (mit retention): import javax.jws.WebService; !!import javax.jws.WebMethod;!import javax.jws.soap.SOAPBinding;!import javax.jws.soap.SOAPBinding.Style;!!@WebService!@SOAPBinding(style = Style.RPC) // Interaktionsstil Fernaufruf public interface Sysprop { // „system property“ @WebMethod String getSysprop(String name);!}!

„Service Endpoint Interface - SEI“

Page 9: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 9

... und hier eine Implementierung: !package sysprop;!!import javax.jws.WebService;!!@WebService(endpointInterface = "sysprop.Sysprop")!

// vollständiger Name des Java interface public class SyspropImpl implements Sysprop {! ! private int n = 0;!public String getSysprop(String name) { ! ! return " " + n++ + " " + ! System.getProperty(name); }!}!

„Service Implementation Bean - SIB“

Page 10: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 10

Bereitstellung (deployment) zu einfachen Testzwecken ohne Web Server in einem separaten Prozess, z.B. auf wuhan: package sysprop;!import javax.xml.ws.Endpoint;! // usage: java sysprop.SyspropPublisher &!public class SyspropPublisher { !public static void main(String[] arg) {! Endpoint.publish(! "http://wuhan.imp.fu-berlin.de:44711/sysprop1", !

! new SyspropImpl() );!! } // keeps running!!

}!

à Dienst wird samt generiertem WSDL-Text bereitgestellt.

Page 11: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 11

Von irgendwoher (VPN!) als Webseite „missbrauchen“:!!$ curl http://wuhan.imp.fu-berlin.de:44711/sysprop1!<html>!<head><title>!Web Services!</title></head>!<body>!<h1>Web Services</h1>!.....!!!!... denn der Aufruf als Web-Dienst erfolgt über POST statt GET.!

mit Browser

Page 12: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 12

package sysprop; ! !// Klient: Benutzung des Dienstes!!import javax.xml.namespace.QName;!import javax.xml.ws.Service;!import java.net.URL;!!class SyspropClient {// usage: java SyspropClient property!public static void main(String arg[ ]) throws Exception {! URL url = new URL(!

! "http://wuhan.imp.fu-berlin.de:44711/sysprop1");! QName qname = new QName("http://sysprop/", !

! ! ! ! "SyspropImplService");! Service service = Service.create(url, qname);! Sysprop proxy = service.getPort(Sysprop.class);! System.out.println(proxy.getSysprop(arg[0])); }!}!

aus WSDL zu entnehmen

Page 13: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 13

... oder auch mit Perl: !!#!/usr/bin/perl!# usage: syspropclient.pl <property>!!use SOAP::Lite;! !my $url ='http://wuhan.imp.fu-berlin.de:44711/sysprop1';!!my $stub = SOAP::Lite->service($url);!

! ! ! ! ! ! ! !print $stub->getSysprop($ARGV[0]), "\n"; ! !!!

Page 14: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 14

... und ein paar Tests: !lounge: java sysprop/SyspropClient os.arch! 0 amd64!lounge: java sysprop/SyspropClient os.name! 1 Linux!lounge: java sysprop/SyspropClient java.version! 2 1.7.0_25!!lounge: syspropclient.pl os.name! 3 Linux!lounge: !

Page 15: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 15

Für komplexere Anwendungen expliziter Einsatz von Werkzeugen: wsgen class

generiert zu einem SEI die für die WSDL-Erzeugung benötigten Hilfsklassen und auf Wunsch auch gleich den WSDL-Text (vgl. CORBA: java2idl )

wsimport wsdl

generiert zu einem WSDL-Text Hilfsklassen zur Benutzung durch Klienten (vgl. CORBA: idl2java )

Page 16: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 16

13.3 WSDL!Web Services Description Language

beschreibt Schnittstelle eines Web-Dienstes mittels XML:

abstrakte Schnittstelle (port type) Schnittstelle unabhängig von Nachrichtenformaten, Beschreibung mit XML Schema

konkrete Schnittstelle (binding)

Abbildung der abstrakten Schnittstelle auf unterstützte Nachrichtenformate

Page 17: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 17

Dienstbeschreibung

abstrakte Schnittstelle

Operation Anfrage Antwort

konkrete Schnittstelle

Operation SOAP-Anfrage SOAP-Antwort

Web-Adressen (end points)

Page 18: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 18

<?xml version="1.0" encoding="UTF-8"?>!<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. -->!<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. -->!<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" ! xmlns:tns="http://sysprop/" ! xmlns:xsd="http://www.w3.org/2001/XMLSchema" ! xmlns="http://schemas.xmlsoap.org/wsdl/" ! targetNamespace="http://sysprop/"! name="SyspropImplService" > !!<types></types> ! ! ! ! ! !<message name="getSysprop">! <part name="arg0" type="xsd:string"></part>!</message>!<message name="getSyspropResponse">! <part name="return" type="xsd:string"></part>!</message>!<portType name="Sysprop">! <operation name="getSysprop">! <input message="tns:getSysprop"></input>! <output message="tns:getSyspropResponse"></output>! </operation>!</portType>!<binding .......!

Schnitt- stelle

Page 19: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 19

<binding name="SyspropImplPortBinding" type="tns:Sysprop">!<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc">!</soap:binding>! <operation name="getSysprop">! <soap:operation soapAction=""></soap:operation>! <input><soap:body use="literal" namespace="http://sysprop/">! </soap:body>! </input>! <output><soap:body use="literal" namespace="http://sysprop/">! </soap:body>! </output>! </operation>!</binding>!<service name="SyspropImplService">! <port name="SyspropImplPort" binding="tns:SyspropImplPortBinding">! <soap:address location="http://wuhan.imp.fu-berlin.de:44711/sysprop1">! </soap:address>! </port>!</service>!</definitions>!

SOAP

URL Service Endpoint

Page 20: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 20

Charakterisierung von Web-Diensten über SOAP:

Ø  Dienst/Ressource kann zustandsbehaftet sein

Ø  Identifikation mittels URL

Ø  Funktionalität ähnlich wie bei Fernaufrufen

Ø  Aufruf stets per HTTP-Anfrage POST Ø  Operation/Parameter werden innerhalb der

POST-Anfrage/Antwort-Daten mit SOAP codiert

Page 21: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 21

Das Entsprechende in CORBA IDL:

module sysprop {!!interface Sysprop {!! ! string getSysprop(in string name);!! ! };!

}; Dies entspricht den Informationen in den WSDL-Abschnitten <message> und <portType> . Die übrigen Angaben gehören nicht zur abstrakten Schnittstelle: <binding> bindet die Realisierung an das SOAP-Protokoll. <service> legt die URL des Dienstes fest.

Page 22: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 22

Web-Dienste vs. DCE/CORBA

Ø  Ähnlichkeiten: §  keine Übertragung von Code §  asynchrone Nachrichten (oneway)

Ø  Web-Dienste haben Nachteile gegenüber CORBA:

§  schwerfälliger Apparat §  keine echten Callbacks (nur in Verbindung mit Asynchronie)

Ø  Web-Dienste haben Vorteile gegenüber CORBA:

§ Stabilität §  allgemeine Akzeptanz

Empfohlene Lektüre: M. Henning: The Rise and Fall of CORBA.

Page 23: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 23

13.4 REST!(„representational state transfer“)

Ø  Rückbesinnung auf die bei HTTP intendierte Semantik von GET, PUT, POST, DELETE, .....

Ø  Gegenstand eines Web-Dienstes ist eine gewisse Menge von

Ressourcen unterschiedlicher Typen Ø  GET, PUT, ... als Standard-Operationen auf diesen Ressourcen

Ø  Parameter sind die Anfrage/Antwort-Daten der HTTP-Anfragen

Ú RESTful Web Services (ohne SOAP)

Page 24: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 24

GET (readonly)

PUT (idempotent) POST DELETE

(idempotent)

Collection URI www.travel.com/booking

Elemente von „booking “ auflisten

Collection „booking “ ersetzen oder erzeugen

Neues Element erzeugen samt geeigneter URI und diese ausliefern

Collection „booking “ löschen

Element URI www.travel.com/booking /FT35ZBQ

Inhalt des Elements „FT35ZBQ“ ausliefern

Element „FT35ZBQ“ ersetzen oder erzeugen

Element „FT35ZBQ“ löschen

FT35ZBQ ist Datei oder Datenbankeintrag oder .....

Page 25: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 25

Java-RS mit diversen Laufzeit-Annotationen:

@Path("sysprop") !public class SysProp {! private int n = 0; // ohne Effekt – kein Zustand! @GET!@Produces("text/html")!public String getAuthor() {! return "<html><h3>made by Pete</h3><html>"; }!@POST !@Consumes("text/plain") ! // MIME type !@Produces("text/plain")!public String getSysprop(String name) {! return " " + n++ + " " + ! System.getProperty(name); } !}!

!Netbeans erlaubt einfaches Testen mit automatisch generiertem Klienten.

Page 26: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 26

Zusammenfassung!Ø  Web-Dienste = „DCE-Prinzip mit Web-Technologie“

Ø  WSDL = Pendant zu DCE/CORBA IDL, formuliert in XML

Ø  SOAP = HTTP-unabhängiges, XML-basiertes Format für Fernaufrufe und Antworten (auch andere Formate sind populär, z.B. JSON), Dienst mit Zustand (WSRF)

Ø  REST = HTTP-basiertes , XML-basiertes Format, SOAP-unabhängig, zustandsloser Dienst

Ø  Entwicklungsunterstützung: diverse Frameworks für unterschiedliche Programmiersprachen.

Page 27: 13 Web-Dienste · 2014. 2. 4. · WS 13/14! ALP 5 - Web-Dienste! 2! 13.1 Prinzipien! Web-Dienste (Web Services): ! fernaufrufbare Dienste, vermittelt über Web Server (keine GUI,

WS 13/14 ALP 5 - Web-Dienste 27

Quellen!

M. Kalin: Java Web Services. O‘Reilly 2009 Oracle: Java EE 6 Web Services

docs.oracle.com/javaee/6/tutorial/doc/bnayk.html W. Iverson: Real-World Web Services. O‘Reilly 2004 Microsoft: Windows Communication Foundation

msdn.microsoft.com/en-us/library/dd456779.aspx P. Cibraro et al.: Professional WCF 4. Wiley 2010 M. Henning: The Rise and Fall of CORBA. Comm. of the ACM 51.8,

August 2008, pp. 53-57 cacm.acm.org/magazines/2008/8/5336-the-rise-and-fall-of-corba/fulltext