Web-Oriented ArchitectureOriginally presented at Gluecon 2010<br />Aaron Fulkerson<br />@roebot<br />
About MindTouch<br />Open source company<br />Strategic documentation platform<br />And a new kind of ECM<br />Projects <b...
SGMLReader
MindTouch Core/2010</li></li></ul><li>What is WOA?<br />
WOA in a Nutshell<br />(<br />)<br />REST<br />WWW<br />WOA<br />*Originally coined by Nick Gall @ironick (Gartner) 2005<b...
REST Cheat Sheet<br />Representational state transfer (REST) is a style of software architecture for distributed hypermedi...
Every resource has a REPRESENTATION
Every resource has a canonical NAME
There is a finite VOCABULARY of actions
State transitions require DISCOVERY</li></li></ul><li>WOA in a Nutshell<br />Information is represented as Resources<br />...
REST applied to WWW<br />
God Bless HTTP<br />Leverage HTTP to its full potential<br /><ul><li>Simple: verbs, headers, status codes
Scalable: every operation is self-contained</li></ul>Every browser can be a client<br /><ul><li>Easy discovery
Easy debugging</li></ul>Build on existing (standard) infrastructure<br /><ul><li>Proxies
Load balancers</li></li></ul><li>Of Clients and Servers<br />In WOA…<br /><ul><li>Services rely on other services
Communicate over HTTP
Are clients of some resources and servers of others
Extensibility, Scalability == Interconnection</li></li></ul><li>Web APIs everywhere<br />APIs allow others to integrate wi...
Frees you from custom engineering for partners</li></ul>Fosters “Unexpected reuse”<br />Let others provide features not on...
Most APIs are Data Island Veneer<br />Closed, specific internal architecture<br />Only exposes use cases directly envision...
Web APIs, WOA style<br />Connect internal systems over REST services<br /><ul><li>Internals become generic
Extensibility becomes application neutral
Upcoming SlideShare
Loading in...5
×

Web Oriented Architecture (WOA) Gluecon, May 2010

5,117

Published on

Web Oriented Architecture. Presented at Gluecon 2010 by Aaron Fulkerson

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,117
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
117
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide
  • At this point we go into MindTouch, an &quot;API first&quot; platform.After the &quot;Mindtouch API&quot; slide, go to the Url on the page, http://developer.mindtouch.com/Deki/API_Reference&quot;This is our reference, but it&apos;s also a page in MindTouch, retrieved via the API&quot;&quot;So how do we discover this data without a nicely maintained reference page like this?&quot;&quot;We can start with going to the @blueprint uri of the service&quot;Uri: http://developer.mindtouch.com/@api/deki/@blueprint&quot;This is machine discoverable XML generated from the API itself. But we want something a bit more readable&quot;Uri: http://developer.mindtouch.com/@api/host/@about&quot;This is also generated by the API from the same meta-data and mirrors the information you saw previously on the developer site&quot;&quot;Ok, now we want to figure out how to get at the data of the page we were looking at&quot;Scroll down (or search) until you get to GET:pages/{pageid}&quot;We need either the URI encoded path to the page or it&apos;s Id&quot;Go back to http://developer.mindtouch.com/Deki/API_Reference&quot;Let&apos;s avoid having to encode the path, and just look at the source of the page&quot;Do a view source and scroll down to show:Deki.PageId = 3228;&quot;So the page id is 3228, let&apos;s plug that in&quot;Uri: http://developer.mindtouch.com/@api/deki/pages/3228&quot;This is all the page meta-data. But we want to just access the actual content of the page&quot;Should be in firefox for this, now you can collapse sections of the Xml simply by clicking the minus in front. Collapse things until you get the bottom of the Xml visible and with it the &lt;contents&gt; node&quot;Notice how various meta-data sections are annotated with &quot;href&quot; attributes. This is part of the self-describing nature of hypermedia. We can find out directly from this document where to go for additional data without having to know how to construct Uri&apos;s for the APIUri: http://developer.mindtouch.com/@api/deki/pages/3228/contents&quot;And now we could consumer the content with another application to for a mash-up. And this is precisely how MindTouch itself allows you to embed pages within pages. And there are a number of options to control the content retrieved&quot;Uri: http://developer.mindtouch.com/en/ref/MindTouch_API/GET%3apages%2f%2f%7Bpageid%7D%2f%2fcontents&quot;To make the consumption of web content easy, MindTouch provides our scripting language, DekiScript. Embedding the contents of this reference page is trivial&quot;Go to a new page and paste:{{web.xml(&quot;http://developer.mindtouch.com/@api/deki/pages/3228/contents?format=xhtml&quot;)}}&quot;Web.Xml let&apos;s you fetch any html and embed it. So we just hit up our own API for the content and it&apos;s embedded&quot;&quot;Of course for accessing our own API, we can simplify it, since DekiScript provides language native constructs to access the API. The previous call can be replaced with this&quot;Edit page and replace the dekiscript with this:{{wiki.page(&quot;en/ref/MindTouch_API/GET%3apages%2f%2f{pageid}%2f%2fcontents&quot;)}&quot;Wiki.page doesn&apos;t need the full uri, just the page to the page and it embeds the content live. Please note that this embed is live, i.e. every time someone accesses that page, they will see any changes made to the embedded page. This isn&apos;t just a grab and paste.&quot;And at this point go back to the slides, show the Extensibility slide and talk about how all this makes our extensibility story using WOA so compelling.Finish up, pimping the benefits of our architecture, how Dream makes it even more efficient than other frameworks that make REST calls and finally end with why everyone should be building their systems WOA style.
  • New preso attached (this was pretty much flow of consciousness, so probably needs an editing pass)The additional slides bring in a bit more detail about REST, and take more of a stance on the state of Web APIs:       - They&apos;re great to expose some stories of your closed system, but it&apos;s really just a veneer       - WOA not only opens things up more for outside parties, but enhances internal dev stories as well       - API first!At this point we go into MindTouch, an &quot;API first&quot; platform.After the &quot;Mindtouch API&quot; slide, go to the Url on the page, http://developer.mindtouch.com/Deki/API_Reference&quot;This is our reference, but it&apos;s also a page in MindTouch, retrieved via the API&quot;&quot;So how do we discover this data without a nicely maintained reference page like this?&quot;&quot;We can start with going to the @blueprint uri of the service&quot;Uri: http://developer.mindtouch.com/@api/deki/@blueprint&quot;This is machine discoverable XML generated from the API itself. But we want something a bit more readable&quot;Uri: http://developer.mindtouch.com/@api/host/@about&quot;This is also generated by the API from the same meta-data and mirrors the information you saw previously on the developer site&quot;&quot;Ok, now we want to figure out how to get at the data of the page we were looking at&quot;Scroll down (or search) until you get to GET:pages/{pageid}&quot;We need either the URI encoded path to the page or it&apos;s Id&quot;Go back to http://developer.mindtouch.com/Deki/API_Reference&quot;Let&apos;s avoid having to encode the path, and just look at the source of the page&quot;Do a view source and scroll down to show:Deki.PageId = 3228;&quot;So the page id is 3228, let&apos;s plug that in&quot;Uri: http://developer.mindtouch.com/@api/deki/pages/3228&quot;This is all the page meta-data. But we want to just access the actual content of the page&quot;Should be in firefox for this, now you can collapse sections of the Xml simply by clicking the minus in front. Collapse things until you get the bottom of the Xml visible and with it the &lt;contents&gt; node&quot;Notice how various meta-data sections are annotated with &quot;href&quot; attributes. This is part of the self-describing nature of hypermedia. We can find out directly from this document where to go for additional data without having to know how to construct Uri&apos;s for the APIUri: http://developer.mindtouch.com/@api/deki/pages/3228/contents&quot;And now we could consumer the content with another application to for a mash-up. And this is precisely how MindTouch itself allows you to embed pages within pages. And there are a number of options to control the content retrieved&quot;Uri: http://developer.mindtouch.com/en/ref/MindTouch_API/GET%3apages%2f%2f%7Bpageid%7D%2f%2fcontents&quot;To make the consumption of web content easy, MindTouch provides our scripting language, DekiScript. Embedding the contents of this reference page is trivial&quot;Go to a new page and paste:{{web.xml(&quot;http://developer.mindtouch.com/@api/deki/pages/3228/contents?format=xhtml&quot;)}}&quot;Web.Xml let&apos;s you fetch any html and embed it. So we just hit up our own API for the content and it&apos;s embedded&quot;&quot;Of course for accessing our own API, we can simplify it, since DekiScript provides language native constructs to access the API. The previous call can be replaced with this&quot;Edit page and replace the dekiscript with this:{{wiki.page(&quot;en/ref/MindTouch_API/GET%3apages%2f%2f{pageid}%2f%2fcontents&quot;)}}&quot;Wiki.page doesn&apos;t need the full uri, just the page to the page and it embeds the content live. Please note that this embed is live, i.e. every time someone accesses that page, they will see any changes made to the embedded page. This isn&apos;t just a grab and paste.&quot;And at this point go back to the slides, show the Extensibility slide and talk about how all this makes our extensibility story using WOA so compelling.Finish up, pimping the benefits of our architecture, how Dream makes it even more efficient than other frameworks that make REST calls and finally end with why everyone should be building their systems WOA style.
  • Web Oriented Architecture (WOA) Gluecon, May 2010

    1. 1. Web-Oriented ArchitectureOriginally presented at Gluecon 2010<br />Aaron Fulkerson<br />@roebot<br />
    2. 2. About MindTouch<br />Open source company<br />Strategic documentation platform<br />And a new kind of ECM<br />Projects <br /><ul><li>DReAM
    3. 3. SGMLReader
    4. 4. MindTouch Core/2010</li></li></ul><li>What is WOA?<br />
    5. 5. WOA in a Nutshell<br />(<br />)<br />REST<br />WWW<br />WOA<br />*Originally coined by Nick Gall @ironick (Gartner) 2005<br />
    6. 6. REST Cheat Sheet<br />Representational state transfer (REST) is a style of software architecture for distributed hypermedia systems such as the World Wide Web. (source: Wikipedia)<br />Principles<br /><ul><li>Everything is a RESOURCE
    7. 7. Every resource has a REPRESENTATION
    8. 8. Every resource has a canonical NAME
    9. 9. There is a finite VOCABULARY of actions
    10. 10. State transitions require DISCOVERY</li></li></ul><li>WOA in a Nutshell<br />Information is represented as Resources<br />Resources are identified by URIs<br />Resources are manipulated via HTTP<br />Contracts are implicit in the representation of the resource<br />Interfaces are generic <br />
    11. 11. REST applied to WWW<br />
    12. 12. God Bless HTTP<br />Leverage HTTP to its full potential<br /><ul><li>Simple: verbs, headers, status codes
    13. 13. Scalable: every operation is self-contained</li></ul>Every browser can be a client<br /><ul><li>Easy discovery
    14. 14. Easy debugging</li></ul>Build on existing (standard) infrastructure<br /><ul><li>Proxies
    15. 15. Load balancers</li></li></ul><li>Of Clients and Servers<br />In WOA…<br /><ul><li>Services rely on other services
    16. 16. Communicate over HTTP
    17. 17. Are clients of some resources and servers of others
    18. 18. Extensibility, Scalability == Interconnection</li></li></ul><li>Web APIs everywhere<br />APIs allow others to integrate with you<br /><ul><li>Simplifies integration
    19. 19. Frees you from custom engineering for partners</li></ul>Fosters “Unexpected reuse”<br />Let others provide features not on your roadmap<br />
    20. 20. Most APIs are Data Island Veneer<br />Closed, specific internal architecture<br />Only exposes use cases directly envisioned by API designers<br />Only outward facing<br />Do not aid internal integration stories <br />
    21. 21. Web APIs, WOA style<br />Connect internal systems over REST services<br /><ul><li>Internals become generic
    22. 22. Extensibility becomes application neutral
    23. 23. Location, availability and breadth of dependencies can take advantage of HTTP
    24. 24. Enables internal innovation without requiring integration work</li></li></ul><li>API first!<br />Don’t expose a feature after the fact via an API<br />Build an API for every feature first<br /><ul><li>Better understanding the feature by internal and external consumers
    25. 25. No blind spots of API inaccessible parts</li></li></ul><li>A word about MindTouch Core/2010<br />Open source collaboration platform<br />for the enterprise and the web<br />Built with Mono/.NET and PHP<br />Runs on SLES, RHEL, Debian/Ubuntu, Windows and even Solaris<br />Downloaded over 500,000 times<br />Used by over 15M people<br />MindTouch is API first!<br />
    26. 26. Application Architecture<br />Email<br />Authentication<br />Extensions<br />Scripts<br />Package<br />Core<br />Subscriptions<br />Lucene<br />PubSub<br />Varnish<br />PubSub<br />Host<br />Storage<br />MindTouch DReAM<br />
    27. 27. MindTouch API<br />http://developer.mindtouch.com/Deki/API_Reference<br />Exposes capabilities of MindTouch as web services<br />MindTouch web UI uses API<br /><ul><li>Anything the web UI can do, a third party can do</li></ul>Uses REST for extensibility<br />Service Discoverability<br /><ul><li>@blueprint
    28. 28. @about</li></li></ul><li>Some links<br />http://developer.mindtouch.com/en/ref/MindTouch_API (glorious)<br />http://developer.mindtouch.com/@api/deki/@blueprint<br />http://developer.mindtouch.com/@api/deki/@about<br />http://developer.mindtouch.com/@api/deki/pages/3228<br />http://developer.mindtouch.com/User:AaronF<br />{{web.xml("http://developer.mindtouch.com/@api/deki/pages/3228/contents?format=xhtml")}}<br />http://developer.mozilla.org<br />www.Shelfari.com<br />www.Whorunsgov.com<br />
    29. 29. Extensibility<br />Web Services<br /><ul><li>Standalone services</li></ul>Local or remote<br />Only requirement: provide a REST API<br /><ul><li>Extensions</li></ul>Hosted or remote<br /><ul><li>DekiScript Extensions</li></ul>Hosted or remote<br />Native or script<br />
    30. 30. Architectural Benefits<br />100% API coverage there’s an API for that<br />Uniform programming model<br /><ul><li>One model to rule them all!</li></ul>Agnostic extensibility<br /><ul><li>Any programming language
    31. 31. Hosted anywhere on the network</li></ul>Flexible deployment topologies<br /><ul><li>Many sites on one machine
    32. 32. Many machines for one site</li></li></ul><li>The DReAM REST framework<br />MindTouch is built on DReAM<br />DReAM optimizes REST calls within framework, by providing an in-process HTTP pipeline<br /><ul><li>Local REST calls do not hit the wire
    33. 33. Serialization/Deserialization only required for out of framework calls
    34. 34. Local Routing of bypasses DNS</li></li></ul><li>WOA makes your life easier<br />Simplifies extensibility, scalability<br />Reduces development time for new features<br />Reduces engineering time spent on integration<br />Creates opportunity for mash-ups and other unforeseen user stories<br />
    35. 35. Thanks<br />Aaron Fulkerson<br />@roebot<br />
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×