XML-RPC & SOAP & Fabio Caprera Systemprogrammierung SS 08
Inhalt XML-RPC Überblick Entstehung Konzept Fehlerbehandlung Vor- und Nachteile SOAP Überblick Entstehung Konzept Fehlerbehandlung Vor- und Nachteile Live-Demo Ausblick
XML-RPC / Überblick Extensible Markup Language Remote Procedure Call Protokoll zur Übertragung von Daten Datentransport über HTTP Darstellung der Daten in XML
XML-RPC / Entstehung Entwicklung von Dave Winer Firma UserLand Software (1992) Web CMS: Frontier XML-RPC (1998) Kontakt mit Microsoft Gemeinschaft entwickelte Implementationen Dave Winer
XML-RPC / Konzept / Übertragung Anfrage Antwort Sender Empfänger
XML-RPC / Konzept / Übertragung Nachrichten-Übermittlung HTTP-POST Request HTTP Response Request Methodenaufruf Parameter Response Rückgabewert Parameter und Rückgabewerte sind Datentypen
XML-RPC / Konzept / Übertragung Request: HTTP + XML POST/xmlrpc HTTP/1.0 User-Agent: Mozilla/5.0 Host: 192.168.1.20 Content-Type: text/xml Content-length: 150
XML-RPC / Konzept / Übertragung Beispiel einer XML-Nachricht Anfrage POST/xmlrpc HTTP/1.0 User-Agent: Mozilla/5.0 Host: 192.168.1.20 Content-Type: text/xml Content-length: 150 <?xml version= 1.0?> <methodcall> <methodname>ausgabe</methodname> <params> <param> <value><string>hallo</string></value> </param> </params> </methodcall>
XML-RPC / Konzept / Übertragung Response: HTTP + XML HTTP/1.0 200 OK Date: Tue, 20 Jun 2008 11:30:10 GMT Server: Apache/1.3.29 Connection: close Content-Type: text/xml Content-length: 150
XML-RPC / Konzept / Übertragung Beispiel einer XML-Nachricht Antwort HTTP/1.0 200 OK Date: Tue, 20 Jun 2008 11:30:10 GMT Server: Apache/1.3.29 Connection: close Content-Type: text/xml Content-length: 150 <?xml version= 1.0?> <methodresponse> <params> <param> <value><string>welt</string></value> </param> </params> </methodresponse>
XML-RPC / Konzept / Inhalt Datentypen Integer <int>4</int> Double <double>1.5</double> String <string>hallo</string> Boolean <boolean>1</boolean> Datum <datetime.iso8601> 20080520T11:30:10 </datetime.iso8601> Base64 <base64> WE1MLVJQQw== </base64> Array Struktur
XML-RPC / Konzept / Inhalt Beispiel eines Arrays <value> <array> <data> <value><string>hallo</string></value> <value><double>1.5</double></value> <value><int>10</int></value> <value><boolean>1</boolean></value> </data> </array> </value>
XML-RPC / Konzept / Inhalt Mehrdimensionale Arrays <value> <array> <data> <value><string>hallo</string></value> <value><double>1.5</double></value> <value> <array> <data> <value><string>fh Wiesbaden</string></value> <value><int>2</int></value> </data> </array> </value> </data> </array> </value>
XML-RPC / Konzept / Inhalt Struktur: Schlüssel-Wert Paare <value> <struct> <member> <name>vorname</name> <value><string>max</string></value> </member> <member> <name>alter</name> <value><int>25</int></value> </member> </struct> </value>
XML-RPC / Konzept / Inhalt Struktur: Verschachtelung möglich <value> <struct> <member> <name>array</name> <value> <array> <data> <value><string>fh Wiesbaden</string></value> <value><double>2.5</double></value> </data> </array> </value> </member> </struct> </value>
XML-RPC / Fehlerbehandlung Fehlerbeispiele unbekannte Methode ungültige Parameter Fehler als XML Antwort fault-tag
XML-RPC / Fehlerbehandlung Fehlernachricht <?xml version= 1.0?> <methodresponse> <fault> <value> <struct> <member> <name>faultcode</name> <value><int>2</int></value> </member> <member> <name>faultstring</name> <value><string>too many parameters.</string></value> </member> </struct> </value> </fault> </methodresponse>
XML-RPC / Vor- und Nachteile Vorteil Leichte Implementierbarkeit Simple Nachteil Feste Datentypen Gebunden am Transportprotokoll (HTTP)
SOAP
SOAP / Überblick Protokoll zur Übertragung von Daten Einfache Nachrichten RPC Prinzip (Request - Response) Client-Server-Modell XML-Nachrichten Entwickelt von Microsoft Abgeleitet von XML-RPC Version 1.2 (W3C Empfehlung von 2003) SOAP = SOAP kein Akronym! (Simple Object Access Protocol)
SOAP / Entstehung Microsofts Eroberung Dave Winer an Bord holen XML-RPC veröffentlichen Im Namen von Dave Winer (ohne MS) XML-RPC SOAP Verbündete suchen IBM SAP AG Lotus SOAP beim W3C einreichen (2000) Standardisiertes Protokoll: SOAP 1.1 Rekommandation: SOAP 1.2 (2003)
SOAP / Konzept Aufbau Übertragung Inhalt
SOAP / Konzept Aufbau Übertragung Inhalt
SOAP / Konzept / Aufbau SOAP Envelope SOAP Header SOAP Body (Transport-Protokoll) Transport-Protokoll Transport-Protokoll (z.b. (z.b. HTTP) HTTP) SOAP Envelope SOAP Envelope SOAP SOAP Header Header SOAP SOAP Body Body
SOAP / Konzept / Aufbau SOAP Envelope Wurzelelement Namespaces / Encoding SOAP SOAP Envelope Envelope SOAP Header Beliebige XML-Informationen Authentifizierung, Transaktionen,... SOAP Attribute mustunderstand : boolean relay : boolean role : anyuri SOAP SOAP Header Header
SOAP / Konzept / Aufbau SOAP Body Nutzdaten (Payload) Beliebige XML-Inhalte Fehlernachricht SOAP SOAP Body Body
SOAP / Konzept / Aufbau <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <!- SOAP Header --> <env:header> <login:security xmlns:login= http://beispielserver.de/login env:mustunderstand= 1 > <login:username>max Mustermann</login:username> <login:password>ster08mu</login:password> </login:security> </env:header> <!- SOAP Body --> <env:body> <text>hallo Welt</text> </env:body> </env:envelope>
SOAP / Konzept / Aufbau <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <!- SOAP Header --> <env:header> <login:security xmlns:login= http://beispielserver.de/login env:mustunderstand="1"> <login:username>max Mustermann</login:username> <login:password>ster08mu</login:password> </login:security> </env:header> <!- SOAP Body --> <env:body> <text>hallo Welt</text> </env:body> </env:envelope>
SOAP / Konzept / Aufbau <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <!- SOAP Header --> <env:header> <login:security xmlns:login="http://beispielserver.de/login" env:mustunderstand="1"> <login:username>max Mustermann</login:username> <login:password>ster08mu</login:password> </login:security> </env:header> <!- SOAP Body --> <env:body> <text>hallo Welt</text> </env:body> </env:envelope>
SOAP / Konzept Aufbau Übertragung Inhalt
SOAP / Konzept / Übertragung Transportprotokoll undefiniert Vorteil: flexibel, unabhängig Verbreitet: HTTP Request / Response enthalten HTTP Codes verwendbar Firewall: Port 80 meist offen Verschlüsselung: HTTPS Alternativen: FTP, SMTP, POP3,...
SOAP / Konzept / Übertragung Einfache Nachricht (EDI) asynchron Sender Empfänger RPC Anfrage / Antwort synchron Sender Vorteil: HTTP (Request / Response) Empfänger
SOAP / Konzept / Übertragung RPC - Anfrage (Request) <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:ns1="http://localhost/websites/sysprog/soap-php/" xmlns:xsd="http://www.w3.org/2001/xmlschema"> <!- SOAP Header --> <!- SOAP Body --> <env:body> <ns1:translatefromgerman> <param0 xsi:type="xsd:string">hund</param0> </ns1:translatefromgerman> </env:body> </env:envelope>
SOAP / Konzept / Übertragung RPC - Antwort (Response) <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:ns1="http://localhost/websites/sysprog/soap-php/" xmlns:xsd="http://www.w3.org/2001/xmlschema"> <!- SOAP Header --> <!- SOAP Body --> <env:body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"> <ns1:translatefromgermanresponse> <rpc:result>return</rpc:result> <return xsi:type="xsd:string">dog</return> </ns1:translatefromgermanresponse> </env:body> </env:envelope>
SOAP / Konzept / Übertragung Message Path (1) Direkt Sender Empfänger
SOAP / Konzept / Übertragung Message Path (2) Indirekt Node 1 Node 2 Node n-1 Node n Sender (inital sender) Intermediär 1 Intermediär m Empfänger (ultimate receiver)
SOAP / Konzept / Übertragung Message Path (2) Intermediäre Header-Blöcke verarbeiten Z.B. Authentifizierung Header Attribute Role : anyuri next, none, ultimatereceiver,... Relay : boolean mustunderstand : boolean Intermediär m
SOAP / Konzept / Übertragung Message Path (2) Routing Mechanismus nicht definiert Zusätzl. Protokoll notwendig Microsoft: WebService Routing Protocol
SOAP / Konzept Aufbau Übertragung Inhalt
SOAP / Konzept / Inhalt SOAP Encoding xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:enc="http://www.w3.org/2003/05/soap-encoding" Regeln für Serialisierung der Daten Enthält gängigste Datentypen Individuelles Encoding möglich encodingstyle : anyuri encodingstyle="http://www.anwendung.de/mein_encoding"
SOAP / Konzept / Inhalt Datentypen string int float boolean anyuri array...
SOAP / Konzept / Inhalt Beispiel: int, string <name xsi:type="xsd:string">max Muster</name> <alter xsi:type="xsd:int">35</alter> Beispiel: array <numbers enc:itemtype="xs:int" enc:arraysize="2"> <number>3</number> <number>5</number> </numbers>
SOAP / Fehlerbehandlung Fault-Block Innerhalb SOAP Body Besitzt mehrere Elemente Code Reason (Detail) (Node) (Role) V1.2 ungleich V1.1 SOAP SOAP Body Body SOAP Fault
SOAP / Fehlerbehandlung Code - Fehlercodes Value Sender Receiver DataEncodingUnknown VersionMismatch MustUnderstand Subcode - anwendungsspezifisch Value
SOAP / Fehlerbehandlung Reason - Fehlerbegründung Text Detail - Zusatzinfos der Anwendung Node - SOAP Knoten Role - Funktion des Knotens
SOAP / Fehlerbehandlung <env:body> <env:fault> <env:code> <env:value>env:sender</env:value> <env:subcode> <env:value>rpc:badarguments</env:value> </env:subcode> </env:code> <env:reason> <env:text xml:lang="en-us">processing error</env:text> <env:text xml:lang="de-de">bearb. Fehler</env:Text> </env:reason> <env:detail> <message>invalid card number</message> </env:detail> </env:fault> </env:body> Quelle: www.w3.org
SOAP / Fehlerbehandlung SOAP Fault V1.1 <soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:body> <soap:fault> <faultcode>soap:server</faultcode> <faultstring>processing error</faultstring> <detail> <message>invalid card number</message> </detail> </soap:fault> </soap:body> </soap:envelope>
SOAP / Vor- und Nachteile Vorteil Standardisiert Plattformunabhängig Flexibel Breite Unterstützung Nachteil Aufgeblähter Code Hoher Rechenaufwand
Inhalt Motivation XML-RPC Überblick Entstehung Konzept Fehlerbehandlung Vor- und Nachteile SOAP Überblick Entstehung Konzept Fehlerbehandlung Vor- und Nachteile Live-Demo Ausblick
Ausblick XML-RPC Wenige Implementationen Kaum erweitert (Stand 1999) SOAP Geeignet für kleine Projekte Anerkannter Standard Beliebt für WebServices Viele Implementationen / Erweiterungen SOAP Attachments Zukunftssicheres Protokoll
Quellen XML-RPC Home Page www.xmlrpc.com wikipedia.de - Wikipedia, die freie Enzyklopädie http://de.wikipedia.org/wiki/xml-rpc http://de.wikipedia.org/wiki/soap World Wide Web Consortium - Web Standards http://www.w3.org/tr/soap12-part1/ Understanding SOAP (2000) Kennard Scribner, Mark C. Stiver SAMS Web Services: Die Standards (2004) Tobias Hauser, Ulrich M. Löwer Galileo Computing
Vielen Dank für die Aufmerksamkeit Fragen? Kontakt s-hess@freenet.de Fabio Caprera fcapr@gmx.de Projekt-Homepage http://sysprog.fc-home.com