PROC SOAP, PROC HTTP und der ganze REST Webservices und SAS KSFE 08. März 2012 Agenda I. Kurze Einführung zu Webservices II. Webservices und SAS 1. Webservices mit SAS konsumieren 2. Webservices mit SAS anbieten 2 www.analytical-software.de 1
ist IT Dienstleister für Business Intelligence und Datenanalyse gibt es seit über 20 Jahren ist einer von vier in Deutschland hat 45 Mitarbeiter, davon 20 von SAS zertifizierte IT Spezialisten und sieben Mitglieder von bietet umfassende Services für SAS Software an, von der Beratung über die Programmierung bis hin zu Schulung und Support ist Mitglied im KSFE Verein 3 Kurze Einführung zu Webservices 4 www.analytical-software.de 2
Webservice: Mehrere Versuche einer Definition "There are many things that might be called Web services in the world at large" (W3C) "eine Software Anwendung, die mit einem Uniform Resource Identifier (URI) eindeutig identifizierbar ist und deren Schnittstelle als XML Artefakt definiert, beschrieben und gefunden werden kann" (Wikipedia) "a software system designed to support interoperable machine to machine interaction over a network" (W3C) "Da stellen wir uns mal ganz dumm und sagen: Ein Webservice, das ist ein großer, runder, schwarzer Raum also eine Blackbox, die hat zwei Löcher, also Schnittstellen. In das eine geben wir die Anfragen rein, und aus dem anderen das kommt später kommen die Ergebnisse wieder raus. Es steht alles bei Wikipedia was ich sage, nur nicht so schön!" (frei nach der Feuerzangenbowle) 5 Webservices: Das Grundprinzip Sendet Anfrage ( Request ) Verarbeitet Anfrage Client ( Konsument ) Empfängt Ergebnis (und verarbeitet es weiter) Internet / Intranet Transportprotokoll: HTTP + SOAP REST Server ( Anbieter ) Erzeugt Ergebnis ( Response ) 6 www.analytical-software.de 3
Request unter der Lupe Beispiel: Webservice geonames.org: Ermittle den Ort, der möglichst nahe an einer bestimmten geographischen Position (42 N, 42 E) liegt.* HTTP- Methode URL SOAP- Envelope und optionaler Header SOAP- Message (XML) SOAP POST http://api.geonames.org/ findnearbyplacename <soapenv:envelope> <soapenv:header /> <soapenv:body> <Coordinates> <Lat>42</Lat> <Lng>42</Lng> <Username>Demo </Username> </Coordinates> </soapenv:body> </soapenv:envelope> REST GET http://api.geonames.org/ findnearbyplacename?username=demo&lat=42&lng= 42 Parameter HTTP- Methode * Hinweis: geonames.org bietet diesen Service nur auf Basis von REST an. Das Beispiel für SOAP ist eine fiktive Übertragung dieses Webservices in ein SOAP-Szenario. URL 7 Response unter der Lupe Beispiel: Webservice geonames.org: Ermittle den Ort, der möglichst nahe an einer bestimmten geographischen Position (42 N, 42 E) liegt.* HTTP- Header SOAP- Envelope und optionaler Header SOAP- Response (XML) SOAP Content-Type: text/xml <soapenv:envelope> <soapenv:header /> <soapenv:body> <geonames> <geoname> <name> Silauri </name> <countryname> Georgia </countryname> </geoname> </geonames> </soapenv:body> </soapenv:envelope> REST Content-Type: text/json oder Content-Type: text/xml { "geonames" : [ "geoname" : { "name" : "Silauri", "countryname" : "Georgia" } ] } * Hinweis: geonames.org bietet diesen Service nur auf Basis von REST an. Das Beispiel für SOAP ist eine fiktive Übertragung dieses Webservices in ein SOAP-Szenario. HTTP- Header Response: XML oder JSON 8 www.analytical-software.de 4
Woher kennt man den Aufbau von Request und Response? SOAP Jeder SOAP-Webservice stellt eine Beschreibung seiner angebotenen Services in Form einer WSDL-Datei (XML) bereit Es gibt Tools, die WSDL-Dateien parsen und daraus beispielhafte Requests und Responses erzeugen, die man als Vorlage nehmen kann (z.b. soapui: http://www.soapui.org/) REST Ansätze zur standardisierten Beschreibung mit WADL sind vorhanden, aber nicht durchgängig verbreitet In der Regel muss man sich auf die Dokumentation verlassen, die der Anbieter des Webservices bereitstellt 9 Webservices: Die "Lingua Franca" (oder der "Babelfisch") der IT Universelle Einsetzbarkeit: Jedes System, das HTTP beherrscht, kann Webservices nutzen oder anbieten Entkopplung: Weder Client noch Server müssen Details (Betriebssystem, Datenbank, Middleware ) ihres Kommunikationspartners kennen Solange die Schnittstelle gleich bleibt, kann die Implementierung des Webservice jederzeit geändert werden, ohne dass der Konsument davon etwas merkt Für SAS: Universelle Zugriffsmöglichkeit auf jede andere Art von System, auch wenn SAS dafür noch keine eigene Schnittstelle anbietet 10 www.analytical-software.de 5
Webservices und SAS 11 Was haben Webservices mit SAS zu tun? Ein kleiner Vorgriff. SAS als Webservice Konsument: wenn im Rahmen eines SAS Programms Informationen benötigt werden, die woanders als Webservice angeboten werden. SOAP Schnittstellen: PROC SOAP, Data Step Funktionen, WSDL Libname REST Schnittstelle: PROC HTTP SAS als Webservice Anbieter: Wenn ein eigenes SAS Programm im Intranet (oder Internet) zur Verfügung gestellt werden soll Schnittstelle (SOAP/REST): Stored Processes 12 www.analytical-software.de 6
PROC SOAP Funktionsweise Ausgangspunkt: SAS-Daten Request- Body (XML) XML Vorverarbeitung Request mit SOAP-Envelope Webservice- Anbieter (SOAP) PROC SOAP Ziel: SAS-Daten Response- Body (XML) XML Nachverarbeitung Response mit SOAP-Envelope 13 PROC SOAP Aufruf Beispiel: Webservice zum Zuordnen von IP-Adressen zu einem geographischen Ort FILENAME Request "C:\KSFE12\Request1.xml"; FILENAME Response "C:\KSFE12\Response1.xml"; PROC SOAP IN = Request OUT = Response URL = "http://ws.cdyne.com/ip2geo/ip2geo.asmx?wsdl" SOAPACTION = "http://ws.cdyne.com/resolveip" ; RUN; Zusätzlich können Benutzername und Passwort übergeben werden (auch aus Metadaten-Server) PROC SOAP basiert auf Java-Frameworks für Webservices (SAS 9.2: Apache Axis2; SAS 9.3: Spring); in SAS 9.3 deutlicher Performance-Gewinn 14 www.analytical-software.de 7
PROC SOAP XML Verarbeitung Wie kommt man von seinen Daten zum XML Request, und wie zieht man aus der XML Response Ergebnisse? SAS bietet eine Vielzahl von Tools für den XML Zugriff XML Libname Engine XML Maps PROC XSL Siehe Tutorial "XML mit SAS leicht gemacht" von Andreas Adlichhammer, KSFE 2011 http://www.analyticalsoftware.de/de/wissensbibliothek/tutorials/xml sas/ Welches dieser Tools ist nun gerade für Webservices zu empfehlen? 15 Empfehlungen zum Verarbeiten von XML Responses Klare Antwort: Es kommt drauf an Mit einer XML Map kommt man eigentlich fast immer ans Ziel. Bei einfachen XML Strukturen genügt evtl. auch ein XML Libname ohne Angabe einer Map. Hier gilt: einfach probieren! Wenn einem tatsächlich eine XML Struktur über den Weg läuft, die man mit einer Map nicht abdecken kann, kann man immer noch XSL verwenden Bei Webservice Ergebnissen aber eher unwahrscheinlich Man kann natürlich auch immer noch die XML Response im Data Step parsen. Damit kann man garantiert jede XML Response verarbeiten Viel Spaß 16 www.analytical-software.de 8
Empfehlung zum Erzeugen von XML Requests: XML "Vorlagen" mit Macrovariablen und resolve Funktion <ws:resolveip xmlns:ws='http://ws.cdyne.com/'> <ws:ipaddress>&ip</ws:ipaddress> </ws:resolveip> XML- Vorlage %LET IP = 15.179.0.138; FILENAME Template "..." FILENAME Request "..." DATA _null_; INFILE Template; FILE Request; INPUT; Zeile = resolve( _Infile_ ); PUT Zeile; RUN; Data Step Alternative: XML- Map; bei komplexen Requests manchmal sinnvoller <ws:resolveip xmlns:ws='http://ws.cdyne.com/'> <ws:ipaddress>15.179.0.138</ws:ipaddress> </ws:resolveip> XML- Request 17 Was gibt's noch außer PROC SOAP: Data Step Funktionen (SAS 9.3) FILENAME Request1 "C:\KSFE12\Request1.xml"; FILENAME Response1 "C:\KSFE12\Response1.xml"; DATA _NULL_; InFileRef = "Request1"; OutFileRef = "Response1"; URL = "http://ws.cdyne.com/ip2geo/ip2geo.asmx?wsdl"; SOAPAction = "http://ws.cdyne.com/resolveip"; /* Aufruf */ rc = SOAPWeb( InfileRef, URL, OutFileRef, SOAPAction ); RUN; Vor und Nachverarbeitung der XML Dateien wie bei PROC SOAP 18 www.analytical-software.de 9
Was gibt's noch außer PROC SOAP: WSDL Libnames "Preproduction" in SAS 9.2 aber nicht wirklich brauchbar, da alles andere als stabil In SAS 9.3 nicht mehr unterstützt (laut SAS Online Doku) 19 PROC HTTP Funktionsweise Ausgangspunkt: SAS-Daten Aufbereitung Parameter URL (Macro-Variable(n)) Webservice- Anbieter (REST) PROC HTTP HTTP-Request HTTP-Response Ziel: SAS-Daten Response (XML) * XML Nachverarbeitung * Anmerkung: Response kann theoretisch auch andere Formate haben (HTML, JSON) die Weiterverarbeitung von XML ist aber am besten in Base SAS integriert. 20 www.analytical-software.de 10
PROC HTTP Aufruf FILENAME Response "C:\KSFE12\Response1.xml"; PROC HTTP URL = 'http://api.geonames.org/findnearbyplacename?lat=42&lng=42&username=demo' OUT = Response METHOD = 'GET' ; RUN; Zusätzlich können Benutzername und Passwort übergeben werden (auch aus Metadaten-Server) Für POST-Anfragen kann mit dem Request auch eine komplette Datei mitgeschickt werden (über einen zweiten Fileref). Wichtig: In diesem Fall Content-Type über Option CT= angeben! 21 Performance PROC SOAP, PROC HTTP, Data Step Performance hängt von sehr vielen Faktoren ab: Netzwerk Geschwindigkeit, Performance des aufgerufenen Webservice und der von ihm angesprochenen Komponenten (Datenbank ) Einige Tendenzen sind aber dennoch feststellbar: PROC SOAP ist in SAS 9.3 deutlich schneller als in SAS 9.2 (nach unseren Messergebnissen bis zu ca. 30 Prozent) PROC SOAP oder Data Step Funktionen machen keinen großen Unterschied Ein Aufruf eines REST Webservice ist wegen des schlankeren Protokolls in der Regel performanter als der Aufruf eines gleichwertigen SOAP Service. 22 www.analytical-software.de 11
Webservices mit SAS 9.3 anbieten: SOAP SAS Metadaten Server http://<host>:<port>/sasbiws/ services/<meta-pfad> SAS- Programm Deployment Stored Process mit Parametern Deployment (Management SOAP- Console) Webservice mit Parametern (/System/Services) Client Der Webservice hat die gleichen Eingabe Parameter wie der Stored Process Die Response des Webservice enthält die für den Stored Process definierten Ausgabeparameter und nicht das, was der Stored Process ggf. nach _WEBOUT schreibt! Das Umsetzen der Stored Process Parameter von oder nach XML übernimmt SAS es muss nicht selbst programmiert werden 23 Webservices mit SAS 9.3 anbieten: REST SAS Metadaten Server http://<host>:<port>/sasbiws/ /rest/storedprocesses/<meta-pfad> Client 1: Benötigt XML SAS- Programm Deployment Es ist nicht notwendig, den Stored Process explizit als Webservice zu deployen! Ein einziger Stored Process unterstützt automatisch beide Schnittstellenformate, XML und JSON Wie bei SOAP enthält die Response des Webservice die für den Stored Process definierten Ausgabeparameter und nicht das, was der Stored Process ggf. nach _WEBOUT schreibt! Die Umsetzung der Parameter nach XML oder JSON erledigt SAS automatisch Stored Process mit Parametern Achtung: Meta-Pfad darf keine Leerzeichen enthalten! http://<host>:<port>/sasbiws/ /json/storedprocesses/<meta-pfad> Client 2: Benötigt JSON 24 www.analytical-software.de 12
Fazit: Unendliche Weiten Mit den SAS Prozeduren PROC SOAP und PROC HTTP (bzw. den entsprechenden Data Step Funktionen) ist es möglich, auf jeden SOAP oder REST basierten Webservice zuzugreifen. Der Webservice muss nichts davon wissen, dass er gerade mit SAS kommuniziert. Somit sind Datenaustausch, Aufruf von Funktionen, ganz allgemein die Kommunikation mit jedem System, das Webservices unterstützt, möglich, ohne dass erst aufwändige Schnittstellen programmiert werden müssen Über die Webservice Anbindung des Stored Process Server kann auch umgekehrt jedes SAS Programm als Webservice bereitgestellt werden. So kann SAS Funktionalität in andere Systeme eingebunden werden, ohne erst neue Schnittstellen entwerfen zu müssen. Gerade die neue JSON/REST Schnittstelle zu StoredProcesses eröffnet auch sehr komfortable Möglichkeiten des Datenaustausch zwischen SAS und Webfrontends 25 Wenn Sie mehr wissen wollen Word Wide Web Consortium: Web Services Architecture SAS Institute Inc.: SAS(R) 9.3 Functions and CALL Routines: Reference SOAPWEB Function SAS Institute Inc.: Base SAS(R) 9.3 Procedures Guide SOAP Procedure SAS Institute Inc.: Base SAS(R) 9.3 Procedures Guide HTTP Procedure SAS Institute Inc.: SAS 9.3 BI Web Services Developer's Guide Andreas Adlichhammer: Vortrag auf der KSFE 2011 in Heidelberg XML mit SAS leicht gemacht 26 www.analytical-software.de 13
Vielen Dank! Haben Sie Fragen? Martin Haffner Andreas Mangold Bernhard Braun Software Architekt Gründer und Student Geschäftsführer (Duale Hochschule) Rohrbacher Str. 26 69115 Heidelberg Telefon +49 6221 6051 0 Martin.Haffner@analytical software.de www.analytical software.de Besuchen Sie uns auch auf unserem Messestand! Dort können Sie im Anschluss mit dem Referenten diskutieren finden Sie Demos zu diesem Vortrag können Sie sich über das Angebot von HMS informieren gibt es Jobangebote gibt es Informationen für Studenten zu Praktika und Abschlussarbeiten bei HMS 27 www.analytical-software.de 14