<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://alexbarnett.net/blog/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Alex Barnett blog : SOA, enterprise2.0, webservices, WOA</title><link>http://alexbarnett.net/blog/archive/tags/SOA/enterprise2.0/webservices/WOA/default.aspx</link><description>Tags: SOA, enterprise2.0, webservices, WOA</description><dc:language>en</dc:language><generator>CommunityServer 2007 (Build: 20416.853)</generator><item><title>Mashup design patterns</title><link>http://alexbarnett.net/blog/archive/2007/05/22/mashup-design-patterns.aspx</link><pubDate>Tue, 22 May 2007 16:27:00 GMT</pubDate><guid isPermaLink="false">0a97a1d1-9921-457b-8bd7-ce5530d7bd45:40118</guid><dc:creator>alexbarnett</dc:creator><slash:comments>4</slash:comments><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://alexbarnett.net/blog/commentapi.aspx?PostID=40118</wfw:comment><comments>http://alexbarnett.net/blog/archive/2007/05/22/mashup-design-patterns.aspx#comments</comments><description>&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;&amp;lt;warning: the following&amp;nbsp;post &lt;/EM&gt;&lt;/STRONG&gt;&lt;A href="http://en.wikipedia.org/wiki/Meanders" mce_href="http://en.wikipedia.org/wiki/Meanders"&gt;&lt;STRONG&gt;&lt;EM&gt;meanders&lt;/EM&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;STRONG&gt;&lt;EM&gt;, is unstrucutured&amp;nbsp;and doesn't arrive at any conclusion&amp;gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In the middle of last year, I invited Dion to meet with me and other members of Microsoft's Data Programmability team to discuss REST in the context of data access over the web. Dion's&amp;nbsp;perspective&amp;nbsp;is one of the reasons our team was able to&amp;nbsp;recognise&amp;nbsp;the&amp;nbsp;potential of a&amp;nbsp;RESTful programming model against relational data, manifested today as &lt;A href="http://alexbarnett.net/blog/archive/2007/04/30/microsoft-codename-quot-astoria-quot-data-services-for-the-web.aspx" mce_href="http://alexbarnett.net/blog/archive/2007/04/30/microsoft-codename-quot-astoria-quot-data-services-for-the-web.aspx"&gt;Project Astoria&lt;/A&gt;.&amp;nbsp; 
&lt;P&gt;I've been waiting to read &lt;A href="http://blogs.zdnet.com/Hinchcliffe/?p=107" mce_href="http://blogs.zdnet.com/Hinchcliffe/?p=107"&gt;Dion's thoughts&lt;/A&gt; on &lt;A href="http://astoria.mslivelabs.com/" mce_href="http://astoria.mslivelabs.com/"&gt;Project Astoria&lt;/A&gt; (via &lt;A href="http://blog.programmableweb.com/2007/05/21/salesforcecom-soa-and-web-apis/" mce_href="http://blog.programmableweb.com/2007/05/21/salesforcecom-soa-and-web-apis/"&gt;John Musser&lt;/A&gt;).&amp;nbsp;It's an interesting&amp;nbsp;take,&amp;nbsp;contextualizing Astoria within the overall architectural trends we're seeing take place. 
&lt;P&gt;I liked this diagram and got me thinking (dangerous...): 
&lt;P&gt;&lt;A title="SOA Web 2.0 COnvergence Revision 2" href="http://blogs.zdnet.com/Hinchcliffe/images/soaweb20convergence_update2.png" mce_href="http://blogs.zdnet.com/Hinchcliffe/images/soaweb20convergence_update2.png"&gt;&lt;IMG title="SOA Web 2.0 COnvergence Revision 2" alt="SOA Web 2.0 COnvergence Revision 2" src="http://blogs.zdnet.com/Hinchcliffe/images/soaweb20convergence_update2.png" border=0 mce_src="http://blogs.zdnet.com/Hinchcliffe/images/soaweb20convergence_update2.png"&gt;&lt;/A&gt; 
&lt;P&gt;Dion warns that the diagram&amp;nbsp;like this&amp;nbsp;could&amp;nbsp;never be&amp;nbsp;complete representation of the concepts discussed &lt;A class="" href="http://blogs.zdnet.com/Hinchcliffe/?p=107" mce_href="http://blogs.zdnet.com/Hinchcliffe/?p=107"&gt;in his post&lt;/A&gt; and&amp;nbsp;is work in progress. The mapping done here for the&amp;nbsp;3 types of applications (Composite Applications, Recombinant Software and&amp;nbsp;Mashups)&amp;nbsp;makes some&amp;nbsp;sense to me. However, it reminds me that I have&amp;nbsp;used the terms "Composite applications" and "Mashups" interchangeably (but never Recombinant Software) depending on who I'm speaking to and&amp;nbsp;without really thinking through what I mean by these terms.&amp;nbsp;To try and clarify my own thinking on this, here's my effort to do so... 
&lt;P&gt;Here are&amp;nbsp;the&amp;nbsp;Wikipedia definitions of Composite Applications, Recombinant Software and&amp;nbsp;Mashups. 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://en.wikipedia.org/wiki/Composite_applications" mce_href="http://en.wikipedia.org/wiki/Composite_applications"&gt;&lt;STRONG&gt;&lt;EM&gt;Composite applications&lt;/EM&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"the term &lt;B&gt;composite application&lt;/B&gt; expresses a perspective of software engineering that defines an application built by combining multiple services. A composite application consists of functionality drawn from several different sources within a &lt;/EM&gt;&lt;A href="http://en.wikipedia.org/wiki/Service_oriented_architecture" mce_href="http://en.wikipedia.org/wiki/Service_oriented_architecture"&gt;&lt;EM&gt;service oriented architecture&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; (SOA). The components may be individual &lt;/EM&gt;&lt;A href="http://en.wikipedia.org/wiki/Web_services" mce_href="http://en.wikipedia.org/wiki/Web_services"&gt;&lt;EM&gt;web services&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;, selected functions from within other applications, or entire systems whose outputs have been packaged as web services (often legacy systems)."&lt;/EM&gt; 
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Recombinant software&lt;/EM&gt;&lt;/STRONG&gt; 
&lt;P&gt;&lt;EM&gt;&amp;lt;none&amp;gt;&lt;/EM&gt; 
&lt;P&gt;&lt;A href="http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)" mce_href="http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)"&gt;&lt;STRONG&gt;&lt;EM&gt;Mashup&lt;/EM&gt;&lt;/STRONG&gt;&lt;/A&gt; 
&lt;P&gt;&lt;EM&gt;"A &lt;B&gt;mashup&lt;/B&gt; is a website or application that combines content from more than one source into an integrated experience."&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So nothing in Wikipedia for "Recombinant software", but&amp;nbsp;in searching for&amp;nbsp;a definition I&amp;nbsp;did come another post by Dion written in June 2006 -&amp;nbsp;&lt;A href="http://blogs.zdnet.com/Hinchcliffe/?p=49" mce_href="http://blogs.zdnet.com/Hinchcliffe/?p=49"&gt;"Is IBM making enterprise mashups respectable?"&lt;/A&gt;.&amp;nbsp; Here Dion asserted: 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"Accepting that information, visuals, and software can be remixed and combined at multiple levels in an application stack means that there are (at least) five places that mashups can take place."&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Dion then&amp;nbsp;went on to define 5 mashup types: 
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;&lt;B&gt;Presentation Mashup:&lt;/B&gt; This is the shallowest form of mashup in the sense that underlying data and functionality don’t meet.&amp;nbsp; Information and laout is retrieved and either remix or just placed next to each other.&amp;nbsp; Many of the &lt;/EM&gt;&lt;A href="http://blogs.zdnet.com/Hinchcliffe?p=8" mce_href="http://blogs.zdnet.com/Hinchcliffe?p=8"&gt;&lt;EM&gt;Ajax desktops&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; today fall into this category and so do portals and other presentation mashup techniques. &lt;/EM&gt;
&lt;LI&gt;&lt;EM&gt;&lt;B&gt;Client-Side Data Mashup:&lt;/B&gt; A slight deeper form of mashup is the data mashup which takes information from remote Web services, feeds, or even just plain HTML and combines it with data from another source. New information that didn’t exist before can result such as when addresses are geocoded and display on a map to create a visualization that could exist without the underlying combination of data. &lt;/EM&gt;
&lt;LI&gt;&lt;EM&gt;&lt;B&gt;Client-Side Software Mashup:&lt;/B&gt; This is where code is integrated in the browser to result in a distinct new capability.&amp;nbsp; While a component model for the browser is only now being hashed out as part of Open Ajax, there is considerable potential in being able to easily wire together pieces of browser-based software into brand new functionality. &lt;/EM&gt;
&lt;LI&gt;&lt;EM&gt;&lt;B&gt;Server-Side Software Mashup: &lt;/B&gt;Recombinant software is probably easier right now on the server since Web services can more easily use other Web services and there are less security restrictions and cross domain issues.&amp;nbsp; As a result, server-side mashups like those that in turn use things like Amazon’s &lt;/EM&gt;&lt;A href="http://web2.wsj2.com/amazon_understands_harnessing_collective_intelligence.htm" mce_href="http://web2.wsj2.com/amazon_understands_harnessing_collective_intelligence.htm"&gt;&lt;EM&gt;Mechanical Turk&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; or any of the &lt;/EM&gt;&lt;A href="http://programmableweb.com/apis" mce_href="http://programmableweb.com/apis"&gt;&lt;EM&gt;hundreds of open Web APIs&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; currently available, are quite common. &lt;/EM&gt;
&lt;LI&gt;&lt;EM&gt;&lt;B&gt;Server-Side Data Mashup:&lt;/B&gt; Databases have been linking and connecting data for decades, and as such, they have relatively powerful mechanisms to join or mashup data under the covers, on the server-side.&amp;nbsp; While it’s still harder to mashup up data across databases from different vendors, products like Microsoft SQL Server increasingly make it much easier to do.&amp;nbsp; This points out that many applications we have today are early forms of mashups, despite the term.&amp;nbsp; Of course, the more interesting and newer aspects of mashups happen above this level.&lt;/EM&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Back to the plot... 
&lt;P&gt;When speaking&amp;nbsp;with an "enterprisey" architect I use the term "Composite applications". "Enterprisey" architects&amp;nbsp;think and talk in terms of governance, security, scale and complexity. They also like to hear and use technical sounding terms that confound non-IT folks ;-) 
&lt;P&gt;When speaking&amp;nbsp;with a developer, I tend to use the term "Mashups". Developers&amp;nbsp;are smart and&amp;nbsp;lazy -&amp;nbsp;they want to write fewer lines of code, do more with less and love to impress. In my mind at least, the term "mashup" implies a speedy development / test / deploy cycle,&amp;nbsp;design flexibility and simplicity in the sense that its "less hard to do". 
&lt;P&gt;Now, if I'm talking to a developer who works in the enterprise context (enterprise as in a&amp;nbsp;large business) the term "enterprise mashup" can connect the "enterprisey" values - governance, security, scale but &lt;EM&gt;without&lt;/EM&gt; the complexity&amp;nbsp;AND&amp;nbsp;&lt;EM&gt;with&lt;/EM&gt; the "mashup" values - speed, flexibility and simplicity.&lt;/P&gt;
&lt;P&gt;Reviewing the 5 mashup&amp;nbsp;design patterns&amp;nbsp;above, there is reasonably defined line: Client-side vs. Server-side. Some of the fall into the WOA space - referring to Dion's diagram above: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"Another important item: The bottom of the overlapping circle contains a cryptic &lt;/EM&gt;&lt;A&gt;&lt;/A&gt;&lt;EM&gt;acronym near the edge of the circle: WOA. This stands for Web-Oriented Architecture, a concept that I’ve written about several times &lt;/EM&gt;&lt;A href="http://blogs.zdnet.com/Hinchcliffe/?p=27" mce_href="http://blogs.zdnet.com/Hinchcliffe/?p=27"&gt;&lt;EM&gt;here&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; and &lt;/EM&gt;&lt;A href="http://blogs.zdnet.com/Hinchcliffe/?p=43" mce_href="http://blogs.zdnet.com/Hinchcliffe/?p=43"&gt;&lt;EM&gt;here&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; in this blog. It’s an idea that basically states that software that goes naturally with the “grain” of the Web, extending the core infrastructure of the Web in natural ways, works the best."&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://alexbarnett.net/blog/aggbug.aspx?PostID=40118" width="1" height="1"&gt;</description><category domain="http://alexbarnett.net/blog/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://alexbarnett.net/blog/archive/tags/Data/default.aspx">Data</category><category domain="http://alexbarnett.net/blog/archive/tags/enterprise2.0/default.aspx">enterprise2.0</category><category domain="http://alexbarnett.net/blog/archive/tags/Mashup/default.aspx">Mashup</category><category domain="http://alexbarnett.net/blog/archive/tags/REST/default.aspx">REST</category><category domain="http://alexbarnett.net/blog/archive/tags/SOA/default.aspx">SOA</category><category domain="http://alexbarnett.net/blog/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://alexbarnett.net/blog/archive/tags/webservices/default.aspx">webservices</category><category domain="http://alexbarnett.net/blog/archive/tags/WOA/default.aspx">WOA</category></item></channel></rss>