<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Layer 7 - Blogs &#187; Mike Amundsen</title>
	<atom:link href="http://www.layer7tech.com/blogs/index.php/author/mikea/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.layer7tech.com/blogs</link>
	<description>API Management &#124; SOA Governance &#124; Cloud Integration</description>
	<lastBuildDate>Thu, 23 May 2013 22:38:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Making Government Data “Easy to Find, Accessible &amp; Usable&#8221;</title>
		<link>http://www.layer7tech.com/blogs/index.php/making-government-data-easy-to-find-accessible-usable/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/making-government-data-easy-to-find-accessible-usable/#comments</comments>
		<pubDate>Fri, 10 May 2013 21:00:16 +0000</pubDate>
		<dc:creator>Mike Amundsen</dc:creator>
				<category><![CDATA[API Academy]]></category>
		<category><![CDATA[API Design & Optimization]]></category>
		<category><![CDATA[API Management]]></category>
		<category><![CDATA[Government]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=4274</guid>
		<description><![CDATA[On May 9, 2013 the White House released an executive order with the title Making Open &#38; Machine Readable the New Default for Government Information. My favorite line in the entire document is: “Government information shall be managed as an asset throughout its life cycle to promote interoperability and openness, and, wherever possible and legally [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.layer7tech.com/blogs/wp-content/uploads/2013/05/whitehouse.gif"><img class="alignleft size-medium wp-image-4295" style="margin-left: 1px; margin-right: 6px;" title="whitehouse" src="http://www.layer7tech.com/blogs/wp-content/uploads/2013/05/whitehouse-300x200.gif" alt="" width="300" height="200" /></a>On May 9, 2013 the White House released an executive order with the title <a href="http://www.whitehouse.gov/the-press-office/2013/05/09/executive-order-making-open-and-machine-readable-new-default-government-" target="_blank">Making Open &amp; Machine Readable the New Default for Government Information</a>. My favorite line in the entire document is:</p>
<p>“Government information shall be managed as an asset throughout its life cycle to promote interoperability and openness, and, wherever possible and legally permissible, to ensure that data are released to the public in ways that make the data <strong>easy to find, accessible, and usable</strong>” (emphasis mine).</p>
<p><strong>No Dumping</strong><br />
The usual approach to this type of work is to simply publish raw data in a directory or repository and then create some fencing around the data that helps track usage and distribution. Essentially, making government data “open” becomes a <a href="http://www.google.com/url?q=https%3A%2F%2Fdevelopers.google.com%2Ffreebase%2Fdata" target="_blank">data dumping </a>operation. This practice fails on all of President Obama’s three key points. First, data dumps make finding valuable information not at all easy. Second, even though the content might appear in a standard format like XML, CSV or JSON, it is hardly accessible (except for to geeks, who love this kind of stuff). And finally, raw data is hardly ever usable. Instead, it’s a mind-numbing pile of characters and quote marks that must be massaged and re-interpreted before it comes close to usability.</p>
<p>So, while this new directive offers an opportunity to make available a vast amount of the data the government collects on our behalf, the devil is in the details. And the details are in the interface – the API. As with poorly-designed kitchen appliances and cryptic entertainment center remote controls, when it takes extensive documentation to explain how to use something, the design has failed. There&#8217;s a simple principle here. Poor API design results in unusable data.</p>
<p><strong>Affordable Data</strong><br />
It doesn&#8217;t have to be this way, of course. Government departments have the opportunity to <a href="http://www.drdobbs.com/architecture-and-design/making-apis-attractive-to-developers/240153548" target="_blank">implement designs</a> that meet the goals set forth in the executive order. They can make it easy for people to find, access and use the data. They can publish not just data but APIs that <a href="http://www.layer7tech.com/blogs/index.php/if-they-have-to-ask-you-didnt-afford-it/" target="_blank">afford</a> searching, filtering and exploring the data in a meaningful and helpful manner; APIs that empower both users and developers to successfully interact with the data, without resorting to <a href="https://explore.data.gov/catalog/raw" target="_blank">a dashboard featuring dozens of options</a> or <a href="https://explore.data.gov/profile/Data-gov-Program-Management-Office/e8ug-wzay" target="_blank">mind-numbing explanations</a>.</p>
<p>In the (likely) event that the initial open data release consists of mere data, companies and individuals would be well advised to resist the temptation to build a multitude of “one-off” applications, each of which solves a single problem or answers a narrow set of questions for some subset of the data. Instead, work should be put into converting the raw data into usable API formats such as Atom, OData, HAL, Collection+JSON and HTML (to name just a few). APIs should be designed with the same care that would be given to any <a href="http://www.layer7tech.com/blogs/index.php/api-design-tutorial-the-interaction-model/" target="_blank">interactive experience</a>.  Investment in <a href="http://www.layer7tech.com/" target="_blank">tools and technologies</a> that can properly represent the data in multiple formats while supporting various use cases and access requirements will yield great results.</p>
<p><strong>Open Data APIs</strong><br />
In the end, organizations that know the importance of a good interface, the power of choice and the freedom of flexible representations will be able to convert raw data into valuable information, which can be consumed by a wide range of users, platforms and devices. These considerations are essential to building and supporting open data APIs.</p>
<p>Because – ultimately – data isn’t open, unless it’s “easy to find, accessible, and usable”.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/making-government-data-easy-to-find-accessible-usable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>If They Have to Ask, You Didn&#8217;t Afford It</title>
		<link>http://www.layer7tech.com/blogs/index.php/if-they-have-to-ask-you-didnt-afford-it/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/if-they-have-to-ask-you-didnt-afford-it/#comments</comments>
		<pubDate>Wed, 20 Mar 2013 22:00:30 +0000</pubDate>
		<dc:creator>Mike Amundsen</dc:creator>
				<category><![CDATA[API Academy]]></category>
		<category><![CDATA[API Design & Optimization]]></category>
		<category><![CDATA[Developers & Development]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=4050</guid>
		<description><![CDATA[My guess is you are familiar with the phrase “If you have to ask, you can&#8217;t afford it”. Well, that&#8217;s not what I mean here. Let me show you what I’m actually getting at&#8230; If They Have to Ask&#8230; Try this: Create a new Web API Get it up and running on some server or [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/ogil/1507585665/" target="_blank"><img class="size-full wp-image-4056 alignleft" style="margin-left: 20px; margin-right: 20px;" title="Question Mark" src="http://www.layer7tech.com/blogs/wp-content/uploads/2013/03/Question-Mark-v3.jpg" alt="Question Mark" width="230" height="300" /></a>My guess is you are familiar with the phrase “If you have to ask, you can&#8217;t afford it”. Well, that&#8217;s not what I mean here. Let me show you what I’m actually getting at&#8230;</p>
<p><strong>If They Have to Ask&#8230;</strong><br />
Try this:</p>
<ul>
<li>Create a new Web API</li>
<li>Get it up and running on some server or other</li>
<li>Hand the single URL to a client dev and say: “There ya go!”</li>
</ul>
<p>Is the API self-descriptive? Does it contain enough information in the responses to allow client devs to know what the API is for, what it is capable of and how they can make valid requests to the server and properly parse the responses?</p>
<p>Here are some questions for you:</p>
<ul>
<li>How many assumptions do you have about your API?</li>
<li>Are these assumptions shared by client devs?</li>
<li>All clients devs?</li>
<li>Even ones who have never met you?</li>
</ul>
<p>If your answer to any of those questions was “No” or &#8220;I’m not sure” then it’s likely that devs will need to ask you a thing or two about how to properly use your API. That&#8217;s no big deal, right?</p>
<p><strong>&#8230;You Didn&#8217;t Afford It</strong><br />
In everyday life, if people have to ask how to use a device (television remote, toaster etc.) then you can be sure that device is “poorly afforded” – it&#8217;s a case of <a href="http://www.jnd.org/dn.mss/affordances_and.html" target="_blank">weak design</a>. We all know devices (especially electronics) that come with huge manuals and complicated explanations – and we all know what a bummer it is when that happens.</p>
<p>In this respect, your API is the same as any other consumer device. It should be <a href="http://www.jnd.org/dn.mss/affordance_conv.html" target="_blank">“well afforded”</a> – developers shouldn’t have to read the technical equivalent of <em>War &amp; Peace</em> before they are able to successfully use your API.</p>
<p>Yes, you can supply <a href="http://uswest.ensembl.org/info/docs/api/core/core_tutorial.html#introduction" target="_blank">detailed instructions</a> in prose, provide a <a href="http://developer.saplo.com/methods" target="_blank">long list</a> of possible methods, include <a href="http://smsified.com/sms-api-documentation/reference" target="_blank">lots of tables</a> etc. These resources are helpful for devs but they can be daunting to read and cumbersome to maintain.</p>
<p>Another approach is to include this kind of information in a machine-readable format – and one that most devs will also understand quickly. This can be achieved by providing instructions (that get automatically updated whenever your API changes) via <a href="http://developer.github.com/v3/#hypermedia" target="_blank">hypermedia</a> <a href="http://nicksda.apotomo.de/2013/02/collectionjson-support-in-roar/" target="_blank">controls</a> in the response. Why write a Web page of documentation to tell devs to construct a URI and use that URI to execute an HTTP GET when you can just <a href="http://haltalk.herokuapp.com/explorer/hal_browser.html#/" target="_blank">include that (and much more)</a> information in your API responses?</p>
<p>Help your client devs out. Throw &#8216;em a bone, here. Don&#8217;t make them read pages of documentation when you can just include simple run-time instructions as they’re needed.</p>
<p><strong>In conclusion: If they have to ask, you didn&#8217;t afford it.</strong></p>
<p>(Originally published <a href="http://amundsen.com/blog/archives/1141" target="_blank">on my personal blog</a>.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/if-they-have-to-ask-you-didnt-afford-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Four Tech-Related Trends That Will Shape 2013</title>
		<link>http://www.layer7tech.com/blogs/index.php/four-tech-related-trends-that-will-shape-2013/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/four-tech-related-trends-that-will-shape-2013/#comments</comments>
		<pubDate>Mon, 28 Jan 2013 18:00:31 +0000</pubDate>
		<dc:creator>Mike Amundsen</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Mobile Access]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=3776</guid>
		<description><![CDATA[Looking ahead, here are four tech-related trends that I think will shape the coming year. These are trends I noticed were already in flight during late 2012. I believe they will continue to affect the way we design and implement solutions in 2013. As you’ll see, all of my predictions are driven by the relentless [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.layer7tech.com/products/mobile-access-products-overview" target="_blank"><img class="alignleft size-full wp-image-3780" style="margin-left: 15px; margin-right: 15px;" title="Mike Amundsen 2013 Predictions" src="http://www.layer7tech.com/blogs/wp-content/uploads/2013/01/2013-Predictions-v2.jpg" alt="Mike Amundsen 2013 Predictions" width="300" height="226" /></a>Looking ahead, here are four tech-related trends that I think will shape the coming year. These are trends I noticed were already in flight during late 2012. I believe they will continue to affect the way we design and implement solutions in 2013.</p>
<p>As you’ll see, all of my predictions are driven by the relentless increase of connected <a href="http://www.layer7tech.com/products/mobile-access-products-overview" target="_blank">mobile</a> devices. This is the dominating overall trend that will continue to affect all aspects of information systems.</p>
<p>In a nutshell, I predict:</p>
<ul>
<li>Individual service deployments on the Web will get smaller and more numerous</li>
<li>Mobile client deployment will be a bottleneck</li>
<li>Server mash-ups will increase but client mash-ups will decline</li>
<li>The demand for seamless switching between personal devices will increase</li>
</ul>
<p><strong>Services on the Web Get Smaller, More Numerous</strong><br />
Influenced by the existence of the many mobile apps running on a single device, Web-based services will become small, single-focused offerings that (in the words of Doug Mcllroy) “do one thing and do it well.” This will also explode the number of available services. The advantage of this trend will be an increase in the agility and evolvability of service offerings. The challenge will be an increased need for governance at the “micro-service” level.</p>
<p><strong>Mobile Client Deployment Becomes a Bottleneck</strong><br />
As more services appear on the Web and more mobile devices spread throughout the world, keeping up with mobile app deployment will become more difficult and more costly. This is especially true for cases where an app store requires approval before release. To mitigate this problem, developers and architects will look for new ways to update and modify the functionality of already-installed mobile apps without the need for full-on redeployment. Solutions will include use of in-message hypermedia designs, reliance on remote discovery documents and just-in-time plug-in style implementations.</p>
<p><strong>Server-Side Mash-Ups Increase while Client-Side Mash-Ups Decline</strong><br />
The increasing popularity of languages like Node.js, Erlang and Closure will make implementing server-side mash-ups more efficient and easier to maintain than doing the same work within a client application; especially for the mobile platform. This will reduce the “chattiness” of client-side applications and increase the security and flexibility of server-side implementations. The result will be a perceived increase in responsiveness and a reduced use of battery power on mobile apps.</p>
<p><strong>Multiple Device Form Factors Will Demand Seamless Sharing</strong><br />
As more users access content on multiple devices, there will be an increased need to design apps that seamlessly share user data across these devices. This will affect the both client- and server-side implementation details. Identity will need to cross devices easily and content syncing will need to be seamless and automatic. App builders will rely more on the “responsive design” pattern in order to automatically adjust displays and functionality to meet the needs of the current form factor. Servers will need to be “context-aware” and provide the most up-to-date content while users switch from one device to the next.</p>
<p>Finally, whether my predictions are spot on or way off, I look forward to a very interesting and challenging 2013.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/four-tech-related-trends-that-will-shape-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Three Common Web Architecture Styles</title>
		<link>http://www.layer7tech.com/blogs/index.php/three-common-web-architecture-styles/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/three-common-web-architecture-styles/#comments</comments>
		<pubDate>Fri, 14 Dec 2012 17:00:26 +0000</pubDate>
		<dc:creator>Mike Amundsen</dc:creator>
				<category><![CDATA[API Academy]]></category>
		<category><![CDATA[API Design & Optimization]]></category>
		<category><![CDATA[API Management]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=3560</guid>
		<description><![CDATA[When talking to clients about the architectural details of an implementation, one of the first questions I ask is: “What architectural style is appropriate for this Web solution?” It turns out this question stumps most of my audience. Not many system architects and developers think about it. Instead, they implement solutions using whatever components and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.layer7tech.com/library/videos/api-academy-three-common-web-architecture-styles/2812?source=L7blog" target="_blank"><img class="alignleft size-full wp-image-3571" style="margin: 0px 10px;" title="Three Common Architecture Styles" src="http://www.layer7tech.com/blogs/wp-content/uploads/2012/12/Three-Common-Architecture-Styles-v3.jpg" alt="Three Common Architecture Styles" width="207" height="300" /></a>When talking to clients about the architectural details of an implementation, one of the first questions I ask is: <a href="http://www.layer7tech.com/library/videos/api-academy-three-common-web-architecture-styles/2812?source=L7blog" target="_blank">“What architectural style is appropriate for this Web solution?”</a> It turns out this question stumps most of my audience. Not many system architects and developers think about it. Instead, they implement solutions using whatever components and frameworks are on hand.</p>
<p>Each technology, service or coding framework exhibits its own “style” for solving a problem. Sometimes we select a system component because it’s familiar (“We use SQL databases because that’s what we’ve always used”). Sometimes we include one because it’s unfamiliar (“We’ve never used Node.js before, let’s try it on this project”). And sometimes we select components based on skill set (“Our team doesn’t have any experience with WebSockets, so let’s just use HTTP instead”). It’s important to step back and get a big picture view when selecting components for a production system that will (hopefully) serve your needs for an extended period of time. And that’s where architectural styles come into play.</p>
<p>Architectural styles set the tone for how components in a system interact, govern the implementation details and establish lines of responsibility and maintenance over time. Setting the style early on and communicating it to the team ahead of time goes a long way toward creating a stable and successful implementation. To help clients get a handle on this topic, I commonly identify three widely varying-styles for Web solutions that people can easily recognize: Tunneling, Objects and Hypermedia.</p>
<p>The Tunneling style is best illustrated by SOAP-based implementations where all requests are “tunneled” through a limited set of components (user management, product services etc.) exposed on the Web. The Object style is one that uses the HTTP CRUD pattern (create-read-update-delete) where domain objects (users, products etc.) are exposed and basic read/write operations are supported for those objects. The Hypermedia style relies on a shared understanding through a message format (media type) that defines both the data elements (users, products etc.) and the possible actions (read, write, filter, report etc.) on those data elements. Each of these styles can be used to implement a solution and each of them has associated benefits and challenges.</p>
<p>This comes up so often that we’ve created <a href="http://www.layer7tech.com/library/videos/api-academy-three-common-web-architecture-styles/2812?source=L7blog" target="_blank">a short API Academy video</a> introducing the subject of architectural styles for the Web. Take a look and see if it gives you some ideas for how you can answer this question the next time you are about to embark on a major system implementation: “What architectural style is appropriate for this Web solution?”</p>
<p><iframe width="576" height="324" src="http://www.youtube.com/embed/GEZaqRDLhTA?wmode=transparent" frameborder="0" allowFullScreen> </iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/three-common-web-architecture-styles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use Hypermedia to Reduce Mobile Deployment Costs</title>
		<link>http://www.layer7tech.com/blogs/index.php/use-hypermedia-to-reduce-mobile-deployment-costs/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/use-hypermedia-to-reduce-mobile-deployment-costs/#comments</comments>
		<pubDate>Fri, 07 Dec 2012 17:00:23 +0000</pubDate>
		<dc:creator>Mike Amundsen</dc:creator>
				<category><![CDATA[API Design & Optimization]]></category>
		<category><![CDATA[API Management]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[Hypermedia]]></category>
		<category><![CDATA[Mobile Access]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=3472</guid>
		<description><![CDATA[I speak about the power and flexibility of hypermedia quite often. I explain the general idea behind hypermedia, discuss its historical roots and show how it can help client applications adapt to changes in data input and application flow. Essentially, a hypermedia-based approach aims to take key elements often placed into the client’s source code [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/Building-Hypermedia-APIs-HTML5-Node/dp/1449306578" target="_blank"><img class="alignleft size-full wp-image-3474" title="Using Hypermedia to Reduce Costs" src="http://www.layer7tech.com/blogs/wp-content/uploads/2012/12/using-hypermedia-to-reduce-costs-v2.jpg" alt="Using Hypermedia to Reduce Costs" width="300" height="227" /></a>I speak about the power and flexibility of <a href="http://www.amazon.com/Building-Hypermedia-APIs-HTML5-Node/dp/1449306578" target="_blank">hypermedia</a> quite often. I explain the general idea behind hypermedia, discuss its historical roots and show how it can help client applications adapt to changes in data input and application flow. Essentially, a hypermedia-based approach aims to take key elements often placed into the client’s source code and move them into the actual response messages sent by the server.</p>
<p>I also point out that using a hypermedia-based approach to building client and server applications takes a different kind of effort than using RPC-style approaches. And I explain that, currently, there is a limited amount of tooling available to support the process of designing, implementing and maintaining hypermedia-style systems.</p>
<p>If your work involves designing, building, testing and deploying a mobile client application, it is likely you need to deal with an “application store” or some other process where your packaged application must be submitted for review and approval before it is available to users for download. This can happen not only with well-known public offerings such as the Apple Store but also within any organization that provides its own application repository aimed at ensuring the safety and consistency of user-available mobile apps.</p>
<p>In an environment of quick-turnaround, agile-style implementations this “app store” approval can be a real bottleneck. It may be not just days but weeks before your app is tested, approved and posted. This can be especially frustrating when you want to deploy a rapid-fire series of enhancements in response to an engaged user community.</p>
<p>A hypermedia-based client design can often support UI, data transfer and workflow modifications by altering the server messages rather than altering the client source code. By doing this, it is possible to improve both the user experience and the system functionality without the need for re-submitting the client code for “app store” review and re-deployment. This also has the potential to reduce the need for interrupting a user’s day with download and reinstall events and can, in the process, cut down on the bandwidth costs incurred during the repeated roll outs of code modifications to a potentially large user base.</p>
<p>Improved agility, a better user experience and reduced bandwidth costs are all tangible benefits that are possible when investing in a hypermedia-based implementation for your mobile client application.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/use-hypermedia-to-reduce-mobile-deployment-costs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Our First API Academy Videos</title>
		<link>http://www.layer7tech.com/blogs/index.php/our-first-api-academy-videos/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/our-first-api-academy-videos/#comments</comments>
		<pubDate>Fri, 23 Nov 2012 23:00:37 +0000</pubDate>
		<dc:creator>Mike Amundsen</dc:creator>
				<category><![CDATA[API Academy]]></category>
		<category><![CDATA[API Design & Optimization]]></category>
		<category><![CDATA[API Management]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=3376</guid>
		<description><![CDATA[I&#8217;m happy to announce the release of the first API Academy video shorts. I&#8217;ve been working with my colleague Ronnie Mitra to create a series of short (five-minute), informative videos on topics related to the Web, APIs and solution design/implementation. These first few videos are just the start. We plan on doing more of these [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.youtube.com/playlist?list=PLNYlZno7OeO2IJ33KcDLOVKTK_jwFJmgv" target="_blank"><img class="alignleft size-full wp-image-3391" style="border: 1px solid grey; margin: 10px 5px;" title="API Academy Videos" src="http://www.layer7tech.com/blogs/wp-content/uploads/2012/11/API-Academy-Videos-v1.jpg" alt="API Academy Videos" width="300" height="222" /></a></p>
<p>I&#8217;m happy to announce the release of <a href="http://www.youtube.com/playlist?list=PLNYlZno7OeO2IJ33KcDLOVKTK_jwFJmgv" target="_blank">the first API Academy video shorts</a>. I&#8217;ve been working with my colleague <a href="http://www.layer7tech.com/blogs/index.php/author/rmitra/" target="_blank">Ronnie Mitra</a> to create a series of short (five-minute), informative videos on topics related to the Web, APIs and solution design/implementation.</p>
<p>These first few videos are just the start. We plan on doing more of these shorts on a wide range of topics, over the coming weeks and months. And we need your help. Please take a look at these first vids and send us your feedback.</p>
<p>You can comment here, on YouTube or by <a href="mailto:mamundsen@layer7tech.com" target="_blank">emailing me directly</a>. We&#8217;re looking for feedback on the format, suggested topics and even how we could improve upon this model (hosting a separate site, adding interaction, badges etc.)</p>
<p>Any time you can spend on watching these and sending comments will be most appreciated. Our aim is to do something helpful, engaging and – above all – enjoyable. Thanks for your help and let&#8217;s see what this can become!</p>
<h4><strong>The API Interaction Model – An Introduction</strong></h4>
<p><iframe width="576" height="324" src="http://www.youtube.com/embed/vINyz_lWzCQ?wmode=transparent" frameborder="0" allowFullScreen> </iframe></p>
<p><span style="color: #ffffff;">&#8212;</span></p>
<h4><strong>Three Common Web Architecture Styles</strong></h4>
<p><iframe width="576" height="324" src="http://www.youtube.com/embed/GEZaqRDLhTA?wmode=transparent" frameborder="0" allowFullScreen> </iframe></p>
<p><span style="color: #ffffff;">&#8212;</span></p>
<h4><strong>Handle Errors on the Web</strong></h4>
<p><iframe width="576" height="324" src="http://www.youtube.com/embed/NTObb3ZS1nk?wmode=transparent" frameborder="0" allowFullScreen> </iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/our-first-api-academy-videos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RESTful or Not?</title>
		<link>http://www.layer7tech.com/blogs/index.php/restful-or-not/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/restful-or-not/#comments</comments>
		<pubDate>Wed, 12 Sep 2012 21:00:53 +0000</pubDate>
		<dc:creator>Mike Amundsen</dc:creator>
				<category><![CDATA[API Academy]]></category>
		<category><![CDATA[API Management]]></category>
		<category><![CDATA[Developers & Development]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=2966</guid>
		<description><![CDATA[As the leader of Layer 7’s North American API Architecture &#38; Design Practice, I often get asked to review Web solutions. Rarely do people ask me if the implementation is appropriate for the intended use. Instead they want to know if the work fits a label invented over a decade ago by a PhD candidate [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.layer7tech.com/services/layer-7-api-academy" target="_blank"><img class="alignleft size-full wp-image-2968" style="margin: 5px 25px;" title="RESTFUL-APIs-v4" src="http://www.layer7tech.com/blogs/wp-content/uploads/2012/09/RESTFUL-APIs-v4.jpg" alt="" width="300" height="143" /></a>As the leader of Layer 7’s North American <a href="http://www.layer7tech.com/services/layer-7-api-academy" target="_blank">API Architecture &amp; Design Practice</a>, I often get asked to review Web solutions. Rarely do people ask me if the implementation is appropriate for the intended use. Instead they want to know if the work fits a label invented over a decade ago by a PhD candidate in his dissertation. They want to know if what they’ve come up with is “RESTful”.</p>
<p>Essentially, REST (representational state transfer) is a style. Specifically, it’s a style of network-based software architecture. This style was first <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm" target="_blank">defined in 2000 by Roy Fielding</a>. Fielding stated that “an architectural style is a coordinated set of architectural constraints that has been given a name for ease of reference”.</p>
<p>The set of architectural constraints Fielding defined in his dissertation remain the key criteria by which we judge whether or not a service is RESTful. Back in 2000, Fielding did a very good job of defining the six primary constraints: client-server; stateless; cache; uniform interface; layered system; code-on-demand.</p>
<p>However, REST is also defined by four “interface constraints” that are only partially defined in the dissertation: identification of resources; manipulation of resources through representations; self-descriptive messages; hypermedia as the engine of application state. In particular, the definitions of self-descriptive messages and <a href="http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven" target="_blank">hypermedia</a> are still debated.</p>
<p>Assuming you can decide on clear definitions of all 10 constraints, all that remains is to identify each of them within the target design. If the implementation does not exhibit all ten (well nine, since code-on-demand is optional), then it is not RESTful. This last step is not difficult. It is the previous step (agreeing on definitions) that causes problems.</p>
<p>Still not sure if your service is RESTful? Well, I originally published this post, in expanded form, on my personal blog. If you want to dig deeper, <a href="http://amundsen.com/blog/archives/1136" target="_blank">take a look over there</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/restful-or-not/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>REST Fest 2012 in Greenville, SC</title>
		<link>http://www.layer7tech.com/blogs/index.php/rest-fest-2012-in-greenville-sc/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/rest-fest-2012-in-greenville-sc/#comments</comments>
		<pubDate>Thu, 06 Sep 2012 21:00:42 +0000</pubDate>
		<dc:creator>Mike Amundsen</dc:creator>
				<category><![CDATA[API Management]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Developers & Development]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Talks]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=2933</guid>
		<description><![CDATA[Over the weekend of September 13-15, a small band of Web architects and developers will – for the third year in a row – descend upon the town of Greenville, SC. They’ll be getting together to catch up on the events of the past year, share stories about recent projects and contemplate the future of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.restfest.org/" target="_blank"><img class="alignleft size-full wp-image-2937" style="margin: 10px;" title="REST Fest 2012" src="http://www.layer7tech.com/blogs/wp-content/uploads/2012/09/REST-Fest-2012-v2.jpg" alt="REST Fest 2012" width="300" height="195" /></a>Over the weekend of September 13-15, a small band of Web architects and developers will – for the third year in a row – descend upon the town of <a href="http://www.restfest.org/venue" target="_blank">Greenville, SC</a>. They’ll be getting together to catch up on the events of the past year, share stories about recent projects and contemplate the future of Web and mobile applications.</p>
<p>This may sound like a typical tech conference but <a href="http://www.restfest.org/" target="_blank">REST Fest</a> is hardly that. Taking its cue from OpenSpaces and similar events, REST Fest is organized by attendees, for attendees. For example, one of the days is devoted to everyone hacking on the same general topic. Another is dedicated to short workshops, all presented by selected registrants.</p>
<p>Similarly, all the general session talks are delivered by the attendees themselves. That’s because one of <a href="http://www.restfest.org/about" target="_blank">the “rules” of REST Fest</a> is “everyone talks and everyone listens”. When you sign up to join REST Fest, you are expected to deliver at least a five-minute lightning talk – and there are no exceptions!</p>
<p>Notable presenters will include <a href="http://www.restfest.org/speakers" target="_blank">keynote speaker Stu Charlton</a> (former CTO of Elastra), Matt Bishop (Senior Product Architect at Elastic Path), Pat Cappelaere (currently working on NASA’s SensorWeb project), Leonard Richardson (co-author of O’Reilly’s RESTful Web Services), Sam Ramji (Head of Strategy at Apigee) and yours truly.</p>
<p>I feel privileged to be co-chair of REST Fest and I’m pleased to note that <a href="http://www.layer7tech.com/" target="_blank">Layer 7</a> is the event’s Head Sponsor this year. Hope to see you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/rest-fest-2012-in-greenville-sc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using WebSockets &#8211; Part 2: A Real-Time Challenge</title>
		<link>http://www.layer7tech.com/blogs/index.php/using-websockets-part-2-a-real-time-challenge/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/using-websockets-part-2-a-real-time-challenge/#comments</comments>
		<pubDate>Wed, 29 Aug 2012 21:00:18 +0000</pubDate>
		<dc:creator>Mike Amundsen</dc:creator>
				<category><![CDATA[API Academy]]></category>
		<category><![CDATA[Developers & Development]]></category>
		<category><![CDATA[Mobile Access]]></category>
		<category><![CDATA[WebSockets]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=2904</guid>
		<description><![CDATA[In the previous blog post in this series (Using WebSockets – Part 1: Minding the Gates), Ronnie Mitra talked about the promise of the WebSocket protocol, as well as some security aspects. In this post, I’ll talk about some of the details of the protocol and what they mean for those planning their own WS [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.layer7tech.com/products/mobile-access-gateway" target="_blank"><img class="alignleft size-full wp-image-2906" style="margin: 10px;" title="HTTP vs WebSocket" src="http://www.layer7tech.com/blogs/wp-content/uploads/2012/08/HTTP-vs-WS-v2.jpg" alt="HTTP vs WebSocket" width="300" height="171" /></a>In the previous blog post in this series (<a href="http://www.layer7tech.com/blogs/index.php/using-websockets-part-1-minding-the-gates/" target="_blank">Using WebSockets – Part 1: Minding the Gates</a>), Ronnie Mitra talked about the promise of the WebSocket protocol, as well as some security aspects. In this post, I’ll talk about some of the details of the protocol and what they mean for those planning their own WS implementations.</p>
<p>The first thing to keep in mind is that WebSocket is a high-level protocol with its own registered schemes (WS: and WSS:). <a href="http://tools.ietf.org/html/rfc6455" target="_blank">The specification</a> describes it as: “&#8230; intended to be as close to just exposing raw TCP to script as possible.” This is very different from HTTP, which is “&#8230;  an application-level protocol for distributed, collaborative, hypermedia information systems.”</p>
<p>That’s good and bad news. It means you have almost the full range of TCP at your disposal. It also means you have none of the established constraints and conventions of the more detailed and focused HTTP specification. This has implications for both design and implementation of WS solutions.</p>
<p>Originally designed with Web browsers in mind, the WS protocol can also be implemented for mobile, desktop, and other stand-alone clients. There are quite a few checks and balances in the specification in order to make it easy (and safe) for browsers to switch from HTTP to WS conversations, all from JavaScript.</p>
<p>However, since <a href="http://caniuse.com/websockets" target="_blank">many installed browsers</a> do not yet natively support the WS protocol, these checks and balances are not always employed. Instead, WebSockets implementations often take advantage of browser workarounds and fallbacks, in order to support the real-time communications the WS protocol was designed to provide.</p>
<p>It’s also important to remember the specification states: “While this protocol is intended to be used by scripts in web pages, it can also be used directly by hosts [which] can therefore send fake ‘Origin’ header fields, misleading the server.” Implementations that will receive requests from non-browser clients should include additional checks to ensure these requests are valid.</p>
<p>Finally, as the protocol was designed to support real-time communications, it won’t scale in the same way HTTP does. Since the server will keep connections open to all active clients in order to track and broadcast content, servers will need to maintain (or persist) information about each connected client (including knowing when that client is no longer connected!)</p>
<p>If your current HTTP implementations rely on server-based session state, you may not see much difference in the scaling limits of WS. Remember though, the Web’s scaling success is largely based on HTTP’s ability to handle client requests without requiring server-persisted data. Also, some software and implementation patterns designed for HTTP will not work for WS.</p>
<p>Implementing WS is not for the faint-of-heart: it’s not yet widely supported on installed browsers; it uses a different implementation model; it takes more effort/resources to scale it up as services become popular. However, there are some good libraries for coding WS solutions and it can be relatively easy to get started on implementing WebSockets.</p>
<p>But be ready. If you experience great success, you’re likely to have a challenge on your hands!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/using-websockets-part-2-a-real-time-challenge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Standards, APIs &amp; WAC</title>
		<link>http://www.layer7tech.com/blogs/index.php/standards-apis-wac/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/standards-apis-wac/#comments</comments>
		<pubDate>Fri, 03 Aug 2012 16:00:47 +0000</pubDate>
		<dc:creator>Mike Amundsen</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[API Academy]]></category>
		<category><![CDATA[API Management]]></category>
		<category><![CDATA[Developers & Development]]></category>
		<category><![CDATA[Mobile Access]]></category>
		<category><![CDATA[Standards]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=2649</guid>
		<description><![CDATA[GigaOM recently ran a piece opining the demise of the Wholesale Applications Community (WAC) after only a couple of years on the scene. The article complained that something like the WAC effort is needed and suggested that, given the nature of the industry and the players involved, it’s not likely to happen. However, what the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.wacapps.net/" target="_blank"><img class="alignleft size-full wp-image-2652" style="margin: 10px;" title="Wholesale Applications Community Logo" src="http://www.layer7tech.com/blogs/wp-content/uploads/2012/08/Wholesale-Applications-Community-Logo-v2.jpg" alt="Wholesale Applications Community Logo" width="300" height="76" /></a>GigaOM recently ran <a href="http://gigaom.com/2012/07/28/why-carriers-cant-create-common-apis-but-need-to-keep-trying/" target="_blank">a piece</a> opining the demise of the <a href="http://www.wacapps.net/" target="_blank">Wholesale Applications Community (WAC)</a> after only a couple of years on the scene. The article complained that something like the WAC effort is needed and suggested that, given the nature of the industry and the players involved, it’s not likely to happen. However, what the author failed to notice was that the WAC’s attempted solution was way off the mark.</p>
<p>The WAC’s key failure was that it attempted to standardize the wrong thing: the API. This is a common problem that occurs repeatedly. GigaOm readers may recall another example of industry-level standards going astray, summarized in the <a href="http://gigaom.com/cloud/5-takeaways-from-the-cloudstack-openstack-dustup/" target="_blank">&#8220;Cloudstack-Openstack Dustup&#8221;</a> piece from April. I suspect several readers can call to mind similar cases in the not-too-distant past. Such cases usually share a common theme: disagreement on the details of the <a href="http://www.layer7tech.com/products/api-management-overview" target="_blank">API</a>.</p>
<p>The solution is right at hand but few see it. The right way to go is to standardize the way messages are designed and shared, not the data points and actions themselves. In other words, the key to successful shared standardization is through media-types and protocols. This is especially true for any communication over HTTP but it holds true for standards operating over any application-level protocol.</p>
<p>We don’t need to look too far to see an example of an industry-led standardization success. <a href="http://en.wikipedia.org/wiki/VoiceXML" target="_blank">VoiceXML</a> was started by AT&amp;T, IBM, Lucent and Motorola as a way to standardize interactive voice system communications. Not long after the first markup was defined in 1999 (a process which took a matter of a few months), the standard was turned over to the <a href="http://www.w3.org/TR/voicexml20/" target="_blank">W3C</a> for continued growth and refinement.</p>
<p>The goals of VoiceXML were strikingly similar to those of the WAC and Cloudstack/Openstack efforts: defining an interoperable standard that could be used across an industry group. The difference in the case of VoiceXML was that the committee focused on message design and domain-specific details shared by all players. It did not attempt to document all the data elements, function calls and workflows to be used in lockstep by all.</p>
<p>Most likely, the WAC meltdown won’t be the last one we’ll see. But this is not the inevitable result of competing interests in the global marketplace. This is a result of well-meaning people aiming at the wrong target. We can do better. We can learn from successful interface designs and focus on making it possible to consistently communicate a wide range of information freely instead of attempting to constrain systems to a single set of possible interactions.</p>
<p>The future of an effective Web, a growing and vibrant distributed network, rests in the hands of those who would take on the task of writing the vital standards that will make it work. I look forward to seeing more efforts where the focus is on improving communication between parties through well-designed message formats instead of on limiting communication though constrained APIs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/standards-apis-wac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
