360 likes | 566 Views
Publishing and transporting Web Services over XMPP. Johannes Wagener. Web Services – State of the Art. UDDI: Universal Description, Discovery and Integration. WSDL: Web Services Description Language. SOAP: Simple Object Access Protocol. (from Wikipedia). Client. Server. doBLAST().
E N D
Publishing and transporting Web Services over XMPP Johannes Wagener
Web Services – State of the Art UDDI: Universal Description, Discovery and Integration WSDL: Web Services Description Language SOAP: Simple Object Access Protocol (from Wikipedia)
Client Server doBLAST() Client (waiting) Server (working) doBLAST() Firewall Client (waiting) Server (working) doBLAST() http is a pull protocol! http timeout
ID Workaround Client Server doBLAST() Client (loop) Server (working) checkResult(ID) “please wait” (…) Client Server (finished) checkResult(ID) RESULT
Next generation of Web Services should ... • be a properly and strictly defined standard • allow stateful job management • allow asynchronous client notification • be discoverable • have big user community with a lot of software
About XMPP • The Extended Messaging and Presence Protocol • Formerly known as Jabber • Invented by Jeremie Miller in 1998 • Formalized by the Internet Engineering Task Force since 2004 • RFC 3920 – 3923, 4622 • XMPP Standards Foundation continues to define various XMPP Extensions • “…a protocol for streaming XML elements in order to exchange structured information in close to real time between any two network endpoints. While XMPP provides a generalized, extensible framework for exchanging XML data, it is used mainly for the purpose of building instant messaging and presence applications.” (from RFC 3920)
XMPP Architecturesimilar to Email … user@server1.com server1.com server3.net server2.org user@server3.net user@server2.org
XMPP Architectureone user can connect with different resources server1.com server3.net server2.org user@server2.org/work user@server2.org/home User ID Server Resource
XMPP ArchitectureServer Components server3.net user@server3.net service.server3.net
XMPP ArchitectureUse cases of Server Components conference.server3.net msn.server3.net server3.net user@server3.net userdirectory.server3.net
XMPP Architecturepresent jabber.org
XMPP Architecturepresent jabber.org googlemail.com
XMPP Architecturepresent jabber.org gmx.net googlemail.com
Servers Clusterable
3 x .NET 3 x C 2 x C# 7 x C++ 3 x COM 2 x Delphi 1 x Flash 9 x Java 1 x Java Script 1 x Lisp 1 x Mono 5 x Perl 2 x PHP 4 x Python 2 x Ruby 1 x TCL 1 x XPCom Libraries
The Protocol • An inbound and outbound “XML Stream” • Client connections are usually done with TCP. However there are no restrictions; i.e. many server allow polling over HTTP • Streams may be encrypted in various formats • Packets are sent as “stanzas” • There are three top level stanzas: <message/> … to submit messages <presence/> … to submit presence information <iq/> … for everything else – and that’s a lot
Simplified Stream Example...with two <message/> stanzas (from RFC 3920)
Information Query: <iq/> C: <iq from='juliet@example.com/balcony' to='server.org' type='get' id='request_1'> <query xmlns='jabber:iq:version'/> </iq> S: <iq type='result' from='server.org' to='juliet@example.com/balcony' id='request_1'> <query xmlns='jabber:iq:version'> <name>ejabberd</name> <version>1.1.2</version> <os>win32/nt5.1.2600</os> </query> </iq>
XMPP Extensions Protocol (XEPs) (…) http://www.xmpp.org/extensions
(Web) Service Discovery There are three kinds of information that need to be discovered about an entity • its basic identity (type and/or category) • the features it offers and protocols it supports • any additional items associated with the entity, whether or not they are addressable as JIDs
Web Service related XEPs } Asynchronous + Stateful - Discoverable - Asynchronous + Stateful + Discoverable +
Ad-Hoc Commands C: <iq type='set' from='user@server.org' to='service.server.org' id='iq_127'> <command xmlns='http://jabber.org/protocol/commands' node='function_name' action='complete'/> <THE RPC INPUT/OUTPUT DATA/> </command> </iq> S: <iq type='result' from='service.server.org' to='user@server.org' id='iq_127'> <command xmlns='http://jabber.org/protocol/commands' sessionid='RPC-SESSION-1' node='function_name' status='completed'> <THE RPC OUTPUT/OUTPUT DATA/> </command> </iq>
Use Case: Disco and Ad-Hoc CommandsRendering a GUI around a service with the XEP-0004 X-Data envelope XEP-0004 X-Data Forms optimized for GUI
X-Data Forms (XEP-0004) GUI Ad-Hoc Commands C: <iq type='set' from='user@server.org' to='service.server.org' id='iq_127'> <command xmlns='http://jabber.org/protocol/commands' node='function_name' action='complete'/> <THE RPC INPUT DATA/> </command> </iq> S: <iq type='result' from='service.server.org' to='user@server.org' id='iq_127'> <command xmlns='http://jabber.org/protocol/commands' sessionid='RPC-SESSION-1' node='function_name' status='completed'> <THE RPC OUTPUT DATA/> </command> </iq> X-Data Forms (XEP-0004) GUI
Web Service related XEPs } Asynchronous + Stateful - Discoverable - Asynchronous + Stateful + Discoverable + Yet another XEP? something else? SOAP ? WSDL ?
Test Case: Web ServiceServer Component WSDbfetch SOAP wsdbfetch.gandhi gandhi
Test Case: ClientGUI (chat-client), Scripting Environment (Bioclipse) WSDbfetch SOAP wsdbfetch.gandhi gandhi bioclipse@gandhi chat-client@gandhi
XEP-0050 Ad-Hoc CommandsTransporting EMBL-EBI’s WSDbfetch Web Service over XMPP
Summary: XMPP is • a well established and widely used XML routing technology • a server-client oriented architecture • working with unique entity identifiers • offering a discoverable network • an asynchronous protocol (the server can push data to the client) “result is available” Client Server function(data) “function started”
Andreas Heusler Egon Willighagen Ola Spjuth
XEP-0096: File Transfer Requirements • Enable seamless file transfer, including fall-back mechanisms as appropriate. • Ensure that the profile will work even when one or both parties are behind a firewall. • Define a full-featured set of metadata for file transfers, including the following: • description • size • name • date • hash • Optionally support ranged transfers.