<?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; API Academy</title>
	<atom:link href="http://www.layer7tech.com/blogs/index.php/tag/api-academy/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>Mon, 10 Jun 2013 21:00:40 +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>The WADL is Not Enough &#8211; Why API Documentation Matters</title>
		<link>http://www.layer7tech.com/blogs/index.php/the-wadl-is-not-enough-why-api-documentation-matters/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/the-wadl-is-not-enough-why-api-documentation-matters/#comments</comments>
		<pubDate>Mon, 10 Jun 2013 21:00:40 +0000</pubDate>
		<dc:creator>Ronnie Mitra</dc:creator>
				<category><![CDATA[API Academy]]></category>
		<category><![CDATA[API Design & Optimization]]></category>
		<category><![CDATA[API Management]]></category>
		<category><![CDATA[Developers & Development]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=4048</guid>
		<description><![CDATA[As I&#8217;ve talked about before, in our API documentation tutorial, documenting your API effectively is critical if you care at all about getting the maximum return from your design investment. It doesn&#8217;t matter if you are building a private API for a few selected partners or trying to build a company around a public API [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.layer7tech.com/library/videos/api-academy-api-documentation-overview/2924" target="_blank"><img class="alignleft size-full wp-image-4452" style="margin: 5px 10px;" title="The WADL is Not Enough" src="http://www.layer7tech.com/blogs/wp-content/uploads/2013/06/The-WADL-is-Not-Enough-300x3001.jpg" alt="The WADL is Not Enough" width="300" height="300" /></a>As I&#8217;ve talked about before, in our<a href="http://www.layer7tech.com/library/videos/api-academy-api-documentation-overview/2924" target="_blank"> API documentation tutorial</a>, documenting your API effectively is critical if you care at all about getting the maximum return from your design investment. It doesn&#8217;t matter if you are building a private API for a few selected partners or trying to build a company around a public API &#8211; poor documentation is going to sink your endeavor every time.</p>
<p>The challenge is that it&#8217;s really difficult to find people who are as great at documenting systems as they are at designing them. As a convenient shortcut, many API designers use tooling to auto-generate documentation. This often means exporting machine-readable interface description files like WSDLs and WADLs based on some type of configuration data entered into a development or testing tool. <a href="http://www.layer7tech.com/library/tech-talks/tech-talk-tuesday-swagger-wadl-api-%E2%80%98scriptions/2494" target="_blank">Assets like these</a> are great for driving programmatic components on both the client and server side but they have limited value otherwise.</p>
<p>WSDL files, in particular, are popular in the <a href="http://www.layer7tech.com/library/solution-briefs/layer-7-for-soa-governance/1896" target="_blank">SOA</a> space because they allow client developers to auto-build proxy classes that can be invoked in the RPC style that is prevalent for SOAP-based integration. This advantage is diminished in the HTTP API world as we have moved away from this document binding style of interface to less structured forms of integration. But even putting this distinction aside, WSDLs have never provided an effective means of documenting SOAP systems and WADLs are no better.</p>
<p>Effective documentation implies effective communication. In the vast majority of situations, a standards-based XML description of your interface is not going to cut it. <a href="http://www.layer7tech.com/solutions/developer-access-solutions-overview" target="_blank">Application developers</a> need to understand much more than the names and parameters of your API if they hope to build real applications in reasonable time-frames. This means you need to create documentation fit for developers – in other words, documentation built for humans.</p>
<p>Your documentation will act as a navigation system through the complexities of your API. Simply providing a WADL is the equivalent of providing a set of GPS coordinates to a tourist in your city. With the right tools, they may get there eventually but a human-readable map would provide a much richer and simpler experience. If you care about the developer experience for your API, you&#8217;ll spend some time and effort writing documentation that works.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/the-wadl-is-not-enough-why-api-documentation-matters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hypermedia Workflow Questions</title>
		<link>http://www.layer7tech.com/blogs/index.php/hypermedia-workflow-questions/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/hypermedia-workflow-questions/#comments</comments>
		<pubDate>Fri, 07 Jun 2013 16:45:50 +0000</pubDate>
		<dc:creator>Mike Amundsen</dc:creator>
				<category><![CDATA[API Academy]]></category>
		<category><![CDATA[API Design & Optimization]]></category>
		<category><![CDATA[Hypermedia]]></category>
		<category><![CDATA[Tech Talks]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=4402</guid>
		<description><![CDATA[I fairly often get emails following up on the workshops, articles, webinars and online tutorials I take part in. I can&#8217;t always answer these questions directly and sometimes deal with them in blog posts or online articles. Following my recent API Tech Talk on hypermedia, I got some questions from Abiel Woldu on how to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.layer7tech.com/library/tech-talks/tech-talk-tuesday-hypermedia-apis/2595" target="_blank"><img class="alignleft size-full wp-image-4407" style="margin: 5px 0px;" title="Hypermedia Workflow" src="http://www.layer7tech.com/blogs/wp-content/uploads/2013/06/Tech-Talk-Question-v3.jpg" alt="Hypermedia Workflow" width="300" height="178" /></a>I fairly often get emails following up on the <a href="http://www.layer7tech.com/workshops/" target="_blank">workshops</a>, <a href="http://www.apiacademy.co/read" target="_blank">articles</a>, <a href="http://www.layer7tech.com/library/archived-webinars/be-my-api-how-to-implement-an-api-strategy-everyone-will-love/2909" target="_blank">webinars</a> and <a href="http://www.apiacademy.co/watch/tutorials" target="_blank">online tutorials</a> I take part in. I can&#8217;t always answer these questions directly and sometimes deal with them in blog posts or online articles. Following <a href="http://www.layer7tech.com/library/tech-talks/tech-talk-tuesday-hypermedia-apis/2595" target="_blank">my recent API Tech Talk on hypermedia</a>, I got some questions from Abiel Woldu on how to handle hypermedia support when the same backend operation is called from different workflows. Here&#8217;s part of the Abiel’s email:</p>
<p style="padding-left: 30px;"><em>“Say you have an end point for validating address; call it /validateAddress. Now this endpoint is called from two work flows.</em></p>
<ol style="padding-left: 30px;">
<li><em> When a user updates his account settings (changes a new address)</em></li>
<li><em> When a user tries to buy a product and enters the shipment address</em></li>
</ol>
<p style="padding-left: 30px;"><em>In both cases the /validateAddress should give different set of links and forms as part of the response of validation (next step affordances) because the flow is different. In this case what is the set of the next links and forms returned from the endpoint? Is it the union of the two workflows and the client knows how to get what it needs? Or does the client send information of which flow it is in and the server uses the information to figure out what response to give it?”</em></p>
<p><strong>Decoupling Backend Processes from Public URIs</strong><br />
This kind of question comes up frequently. Essentially, there are a couple assumptions here that are worth exploring. The first is the idea that a backend operation (e.g. “validateAddress()”) is exposed over HTTP as a single endpoint, no matter the calling context. This is not a requirement. In fact, it is advantageous to decouple public addresses (URI) from private operations on the server. HTTP (whether using HTTP-CRUD, Hypermedia-REST or some other model) offers the advantage of using multiple public URIs to point to the same backend operation. For example, it is perfectly correct to publish both /validateExistingAddress and /validateNewAddress URIs each of which points to the same  “validateAddress()” operation on the server.</p>
<p><strong>Not Everything Needs a URI</strong><br />
Just because the backend server has an operation such as “validateAddress()” does not mean there has to be a URI associated with that operation. For example, the “user updates his account settings” workflow need not have a direct URI call to “validateAddress()”. Instead, there could be an account settings resource (/account-settings/) that supports the HTTP.PUT method and accepts a body containing (among other things) a modified address. Executing this client-side operation (PUT /account-settings/) passes data to the server and – along with other operations – the server calls the “validateAddress()” operation itself and reports the results to the client.</p>
<p>The same can be done in the case of “user tries to buy a product and enters the shipment address”. This address validation could be a small part of the server-side operation and processing of an HTTP.POST to a /check-out/ resource.</p>
<p><strong>Mapping Actions to URI &amp; Method</strong><br />
In the HTTP-CRUD model, the focus is on using URIs to identify entities and/or operations and using the protocol methods to perform actions. For example, an /addresses/ resource that supports adding (POST), modifying (PUT), removing (DELETE) and retrieving (GET) addresses associated with a context (logged in user, check-out processing etc.) In this case, POSTing or PUTing a resource body to the server allows the server to call the “validateAddress()” operation (among other things) and report results to the client.</p>
<p><strong>Mapping Actions to Hypermedia Controls</strong><br />
In the hypermedia model, actions are described using a hypermedia control such as a link or form. The URI is not important in this model. Instead the control has an identifier (e.g. “validate“), indicates a protocol action (“POST“) and lists state data to include in the payload.</p>
<p>In <a href="https://github.com/kevinswiber/siren" target="_blank">Siren</a> it might look like this:</p>
<pre style="padding-left: 30px;">"actions": [
 {
     "name": "validate",
     "title": "Validate an Address",
     "method": "POST",
     "href": "...",
     "type": "application/x-www-form-urlencoded",
     "fields": [
           { "name" : "Street", "type" : "text", "value" : "123 Main Street" },
           { "name" : "City",   "type" : "text", "value" : "Byteville"},
           { "name" : "State",  "type" : "text", "value" : "MD" },
           { "name" : "ZIP",    "type" : "text", "value" : "12345"}
     ]
     }
 ]</pre>
<p>Note that I didn&#8217;t bother to enter a value for the href in this example. It could be any valid URL; I just left it out.</p>
<p><strong>Tracking Workflow Progress Within Messages</strong><br />
Here&#8217;s another question from Abiel Woldu&#8217;s email:</p>
<p style="padding-left: 30px;"><em>“The concept of which work flow the client is going through – is it code that should reside in the API code itself or it&#8217;s something that sits outside in some other gateway or something?”</em></p>
<p>When implementing processes over HTTP, it&#8217;s wise not to rely on stateful multi-request chains. In other words, don&#8217;t expect either the client or server to keep track of where some request belongs in a workflow. Instead, include that information in the request and response bodies themselves. This pattern of including all the important context information with each request and response not only assures that the request can be handled independently (e.g. in a load-balanced cluster), it also helps clients and servers to do work within varying time-spans (e.g. a clients can cache the last request to disk and pick things up a day later). In the REST model, Fielding described this as making messages <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_3" target="_blank">“self-descriptive”</a>.</p>
<p>For example, there might be a use case that prompts human users to provide quite a lot of information (across various UI tabs) before finally submitting this completed set of work to the server for final validation and processing. One way to support this over HTTP is to allow clients to store “work-in-progress” (WIP) records on the server. As each “tab” (or other UI affordance) is completed, the client app is free to execute a POST or PUT operation with the payload to a URI supplied by the server. The stored data would include a value that indicates how far along in the workflow the user has progressed. This same client app could also recall stored WIP records, inspect the workflow indicator and prompt the user to pick up where she left off. Once all the required elements were supplied, the work could be forwarded for final validation and processing.</p>
<p><strong>Dynamic Workflow via Hypermedia</strong><br />
Finally, in some cases, the series of steps in a workflow might vary greatly at runtime. For example, a service might support a multi-tenant model where each instance of “supply all the details for this work” has different steps or the same steps appear in differing order. The “next step” need not be memorized by the client code. Instead, hypermedia servers can inspect the current server-side configuration, check the current progress by the user and then supply the correct “next step” for this particular instance.</p>
<p>In this way, the client app can support a wide range of workflow details without needing custom code ahead of time (or even downloaded code-on-demand). Instead, the client app only needs to be able to recognize the “next step” link and navigate to that resource.</p>
<p><strong>In Summary</strong><br />
In general, when using HTTP:</p>
<ol>
<li>There is no rule that you <em>must</em> expose internal methods as public URIs</li>
<li>You <em>may</em> use more than one URI for the same backend operation</li>
<li>In the HTTP-CRUD model, you usually map operations by linking URIs and methods</li>
<li>In the hypermedia model, you usually map operations by linking controls and state variables</li>
<li>It is best to use “self-descriptive” messages to track workflow progress statelessly</li>
<li>The hypermedia model supports dynamic workflow progress using the “next step” link pattern</li>
</ol>
<p>Thanks to Abiel for his questions and his generous permission for me to use his email and name in this blog post. If you&#8217;ve got a question that I haven’t answered online before, feel free to ping me via twitter (<a href="http://twitter.com/mamund" target="_blank">@mamund</a>) and fire away.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/hypermedia-workflow-questions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Banking on APIs</title>
		<link>http://www.layer7tech.com/blogs/index.php/banking-on-apis/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/banking-on-apis/#comments</comments>
		<pubDate>Fri, 31 May 2013 21:00:25 +0000</pubDate>
		<dc:creator>Ronnie Mitra</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=4365</guid>
		<description><![CDATA[Something has changed in the world of banking technology. Over the last few months, the architects who shape IT strategy for banks have started talking about API programs with an enthusiasm and energy that was barely at surface level in 2012. I can&#8217;t put my finger on exactly what has changed but IT leaders in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.apiacademy.co/" target="_blank"><img class="alignleft size-full wp-image-4370" style="margin: 10px;" title="Banking APIs" src="http://www.layer7tech.com/blogs/wp-content/uploads/2013/05/Banking-APIs-v1.jpg" alt="Banking APIs" width="300" height="276" /></a>Something has changed in the world of banking technology. Over the last few months, the architects who shape IT strategy for banks have started talking about API programs with an enthusiasm and energy that was barely at surface level in 2012. I can&#8217;t put my finger on exactly what has changed but IT leaders in the financial services world are moving towards implementing API strategies as a legitimate method for supporting a wide array of business drivers.</p>
<p>We know that connectivity and message-based integration are not new concepts for the financial industry. Enterprise architects in the banking world are masters in the art of connecting old systems with new facades and exposing backend resources through multiple channels. But up until now, a conversation with these professionals would be dominated by concerns rooted in the Services Oriented Architecture world: &#8220;How do we prevent service proliferation?&#8221;, &#8220;How do we secure SOAP conversations?&#8221;  In fact, it wasn&#8217;t too long ago that the mere mention of an API as a strategic initiative would leave these enterprise architects scratching their heads.</p>
<p>Fast forward to today and many banking technologists are explicitly asking for <a href="http://www.layer7tech.com/solutions/api-management-solutions-for-mobile-and-web" target="_blank">API Management solutions</a>.  They know the terminology of the space, they know what they want to achieve and they know the pitfalls they wish to avoid. In addition, I&#8217;ve been amazed at the depth of knowledge that has emerged among these teams, as enterprise developers have invested their own time to learn from relevant <a href="http://www.apiacademy.co/watch/tutorials" target="_blank">tutorials</a> , <a href="http://www.apiacademy.co/read" target="_blank">articles</a> and – of course – blogs posts. The caricature of the enterprise developer as a SOA dinosaur struggling to understand the &#8220;new stuff&#8221; is fast becoming a myth.</p>
<p>To be fair, there is still great hesitation within the industry when it comes to opening up data and losing control of the user experience but that isn&#8217;t stopping banks from applying good API design practice internally. As we&#8217;ve said <a href="http://www.layer7tech.com/blogs/index.php/behind-closed-doors-the-world-of-private-apis/" target="_blank">before</a>, APIs are not simply about reaching  anonymous third-party developers. Indeed, organizations can gain great benefits by applying API Management to the interactions that take place in private for their own apps and partners.  But I&#8217;ve been astounded by the handful of architects in the banking world I&#8217;ve met who are actively experimenting with public API releases.  It seems that the fear of losing control over data, services and products is beginning to lose out to the perceived value of growing the business through a new channel.</p>
<p>Banks provide a great indicator for the direction of enterprise technology and it certainly seems that the &#8220;API thing&#8221; has legs within this space. If you are in the enterprise world, make sure you have considered how launching an API program might help your business – because it&#8217;s increasingly likely your competitors are already doing so.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/banking-on-apis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>1</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>API Business ROI</title>
		<link>http://www.layer7tech.com/blogs/index.php/api-business-roi/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/api-business-roi/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 22:00:19 +0000</pubDate>
		<dc:creator>Alex Gaber</dc:creator>
				<category><![CDATA[API Academy]]></category>
		<category><![CDATA[API Management]]></category>
		<category><![CDATA[Hackathons]]></category>
		<category><![CDATA[Webinars]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=3981</guid>
		<description><![CDATA[Numerous measurements exist for APIs. On the technical level, these metrics are fairly well understood. However, on the business level, there is a great deal of confusion over how the effectiveness of an API program can be accurately measured. Layer 7’s March 14 webinar, ROI for APIs – which will feature input from TechCrunch and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://events.layer7tech.com/API-ROI?source=l7blog" target="_blank"><img class="alignleft size-full wp-image-3983" style="margin: 10px;" title="API ROI Webinar" src="http://www.layer7tech.com/blogs/wp-content/uploads/2013/03/API-ROI-Webinar-v2.jpg" alt="API ROI Webinar" width="300" height="218" /></a>Numerous measurements exist for APIs. On the technical level, these metrics are fairly well understood. However, on the business level, there is a great deal of confusion over <a href="http://events.layer7tech.com/API-ROI?source=l7blog" target="_blank">how the effectiveness of an API program can be accurately measured</a>.</p>
<p>Layer 7’s March 14 webinar, <a href="http://events.layer7tech.com/API-ROI?source=l7blog" target="_blank"><strong>ROI for APIs</strong></a> – which will feature input from TechCrunch and AT&amp;T – should help to clear up some of this confusion. In particular, the webinar will focus on how hackthons can be used to gather valuable data for API ROI measurement.</p>
<p>How you measure your API ROI will depend on the purpose your APIs play in the greater business picture. Therefore, to provide a little primer for <a href="http://events.layer7tech.com/API-ROI?source=l7blog" target="_blank">the webinar</a>, I thought it would be helpful to give examples of a few API business models and how they might generate revenue.</p>
<ul>
<li><strong>Per API Call</strong><br />
Text messages sent via an API are billed at $0.01 per message</li>
<li><strong>Per API Payload</strong><br />
Voice transcriptions via an API are billed at $0.01 per word</li>
<li><strong>Transactional Revenue</strong><br />
An API call delivers a purchase</li>
<li><strong>Firehose API</strong><br />
A monthly subscription provides unlimited API access</li>
<li><strong>Platform API</strong><br />
An existing SaaS platform provides an API for partner integrations</li>
</ul>
<p>To learn more, <a href="http://events.layer7tech.com/API-ROI?source=l7blog" target="_blank">register for the webinar – <strong>ROI for APIs: Using Hackathons to Evaluate Your API Program featuring TechCrunch and AT&amp;T</strong></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/api-business-roi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Measuring Hackathon ROI for APIs</title>
		<link>http://www.layer7tech.com/blogs/index.php/measuring-hackathon-roi-for-apis/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/measuring-hackathon-roi-for-apis/#comments</comments>
		<pubDate>Thu, 10 Jan 2013 19:00:53 +0000</pubDate>
		<dc:creator>Alex Gaber</dc:creator>
				<category><![CDATA[API Academy]]></category>
		<category><![CDATA[API Management]]></category>
		<category><![CDATA[Developers & Development]]></category>
		<category><![CDATA[Hackathons]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=3733</guid>
		<description><![CDATA[I often get asked whether hackathons actually provide API publishers with any true, measurable return on investment (ROI). The simple answer is “yes” – and the positive benefits of hackathons are now undeniable.  However, the benefits can be a little hard to quantify, making ROI tricky to measure objectively. For example, hackathons provide a fantastic [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.layer7tech.com/services/hackathon-promotion-and-management-services" target="_blank"><img class="alignleft size-full wp-image-3736" style="margin: 10px;" title="Hackathon ROI" src="http://www.layer7tech.com/blogs/wp-content/uploads/2013/01/Hackathon-ROI-v2.jpg" alt="Hackathon ROI" width="300" height="215" /></a>I often get asked whether <a href="http://www.layer7tech.com/services/hackathon-promotion-and-management-services" target="_blank">hackathons</a> actually provide API publishers with any true, measurable return on investment (ROI). The simple answer is “yes” – and the positive benefits of hackathons are now undeniable.  However, the benefits can be a little hard to quantify, making ROI tricky to measure objectively.</p>
<p>For example, hackathons provide a fantastic way to grow developer awareness of your API as a brand in and of itself, separate from your core business. When the developers who attend your hackathon go back to their day jobs on Monday, they have added your API to their programming tool belts and will use it, when appropriate, in upcoming projects. Additionally, hackathons will attract the attention of thought leaders and influencers who will mention your API on blogs and forums, spreading the word further. These benefits can deliver considerable value but they can also be difficult to quickly quantify.</p>
<p>Nevertheless, API evangelists will be held accountable for demonstrating the real-world value of their hackathons. One way to do this is to show how hackathons enable your company to conduct developer user experience (DevUX) research at a minimal cost. Gathering feedback and data from hackathons provides the most cost-effective way to optimize the quality of your API as a product by answering questions like:</p>
<ul>
<li>How user-friendly is my registration process?</li>
<li>Do my APIs ever return incorrect or unexpected results?</li>
<li>What new features should I add to future versions of my API?</li>
<li>Is the skill level of my API appropriate for long-tail app developers?</li>
<li>What kind of tutorials and other documentation will my developers need?</li>
<li>Which programming languages are my developers using to implement my APIs?</li>
<li>How useful is my API and what are the most common/innovative use cases for it?</li>
</ul>
<p>The data and feedback you gather will also help you to further demonstrate ROI by providing the answers to questions such as:</p>
<ul>
<li>How many developers registered and how many actually attended?</li>
<li>Did the hackathon appeal to the types of developer we want to attract?</li>
<li>Did any valuable or innovative apps get prototyped?</li>
</ul>
<p>Hackathons offer a fantastic way to build excitement around your API and optimize the quality of your interface. If you still have any doubts, <a href="http://www.layer7tech.com/hackathons" target="_blank">join us for a hackathon</a> (and participate!) to see how other API platforms are doing it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/measuring-hackathon-roi-for-apis/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>API Design Tutorial: Pagination</title>
		<link>http://www.layer7tech.com/blogs/index.php/api-design-tutorial-pagination/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/api-design-tutorial-pagination/#comments</comments>
		<pubDate>Wed, 19 Dec 2012 17:00:43 +0000</pubDate>
		<dc:creator>Ronnie Mitra</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[API Academy]]></category>
		<category><![CDATA[API Design & Optimization]]></category>
		<category><![CDATA[API Management]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web API]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=3510</guid>
		<description><![CDATA[At the Layer 7 API Academy, we&#8217;ve had a few requests from API designers who are seeking strategies for handling large amounts of data in API responses.  Pagination is the most common method for addressing this scenario. Pagination, which is very common on the Web, allows API architects to conserve resources, improve response times and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.layer7tech.com/library/videos/api-academy-use-pagination-in-web-api-design/2821" target="_blank"><img class="alignleft size-full wp-image-3609" style="margin: 0px 10px;" title="Layer 7 Pagination Tutorial" src="http://www.layer7tech.com/blogs/wp-content/uploads/2012/12/Layer-7-Pagination-Tutorial-v2.jpg" alt="Layer 7 Pagination Tutorial" width="300" height="245" /></a></p>
<p>At <a href="http://forms.layer7tech.com/api-academy2?source=L7blog" target="_blank">the Layer 7 API Academy</a>, we&#8217;ve had a few requests from API designers who are seeking strategies for handling large amounts of data in API responses.  Pagination is the most common method for addressing this scenario. Pagination, which is very common on the Web, allows API architects to conserve resources, improve response times and optimize the user experience. It&#8217;s a way of splitting up data into &#8220;pages&#8221; and is used in just about any API that returns collections of data.</p>
<p>I&#8217;ve released a short video tutorial titled <strong><a href="http://www.layer7tech.com/library/videos/api-academy-use-pagination-in-web-api-design/2821" target="_blank">Use Pagination in Web API Design</a></strong> to introduce the ins and outs of the interface. This video provides a crash course explaining pagination and outlining how to use it effectively in the design of Web APIs. I couldn&#8217;t fit all the implementation considerations I wanted in this six-minute tutorial, so watch out for a follow-up video on the subject.</p>
<p><iframe width="576" height="324" src="http://www.youtube.com/embed/n8K8nHkYwdQ?wmode=transparent" frameborder="0" allowFullScreen> </iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/api-design-tutorial-pagination/feed/</wfw:commentRss>
		<slash:comments>2</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>API Design Tutorial: The Interaction Model</title>
		<link>http://www.layer7tech.com/blogs/index.php/api-design-tutorial-the-interaction-model/</link>
		<comments>http://www.layer7tech.com/blogs/index.php/api-design-tutorial-the-interaction-model/#comments</comments>
		<pubDate>Mon, 10 Dec 2012 22:00:06 +0000</pubDate>
		<dc:creator>Ronnie Mitra</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[API Academy]]></category>
		<category><![CDATA[API Design & Optimization]]></category>
		<category><![CDATA[API Management]]></category>
		<category><![CDATA[Web API]]></category>

		<guid isPermaLink="false">http://www.layer7tech.com/blogs/?p=3425</guid>
		<description><![CDATA[API design can be daunting. With so many decisions to make and so many differing opinions available on interface design, it&#8217;s easy to feel frustrated by the process.  Even worse, it&#8217;s possible to follow bad advice and end up designing an API that developers hate using. That&#8217;s why we at the API Academy stress the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.youtube.com/watch?v=vINyz_lWzCQ" target="_blank"><img class="alignleft size-full wp-image-3525" style="margin: 0px 10px; border: 1px solid grey;" title="API  Academy - The Interaction Model" src="http://www.layer7tech.com/blogs/wp-content/uploads/2012/12/API-Academy-Interaction-Model-v2.jpg" alt="API  Academy - The Interaction Model" width="300" height="175" /></a>API design can be daunting. With so many decisions to make and so many differing opinions available on interface design, it&#8217;s easy to feel frustrated by the process.  Even worse, it&#8217;s possible to follow bad advice and end up designing an API that developers hate using.</p>
<p>That&#8217;s why we at the <a href="http://www.layer7tech.com/services/layer-7-api-academy" target="_blank">API Academy</a> stress the importance of making rational decisions rather than irrationally selecting design patterns based on emotion or trends.  We want you to <em>choose</em> your design elements rather than <em>picking</em> them from the latest set of formats or technologies that you&#8217;ve heard about.</p>
<p>And that&#8217;s why we&#8217;re working on a series of tutorial videos, as my colleague Mike Amundsen <a href="http://www.layer7tech.com/blogs/index.php/our-first-api-academy-videos/" target="_blank">recently announced</a>. The first of these videos, titled <a href="http://www.youtube.com/watch?v=vINyz_lWzCQ" target="_blank">The API Interaction Model &#8211; An Introduction</a>, provides an overview of  a design process that will help you consider your user&#8217;s perspective in order to make effective design choices later. The ideas I discuss in this video are rooted in user-centered design processes that have been very effective in the software and product design worlds.</p>
<p>If you&#8217;re currently designing an API, invest five minutes and watch the video.  It should be time well spent.</p>
<p><iframe width="576" height="324" src="http://www.youtube.com/embed/vINyz_lWzCQ?wmode=transparent" frameborder="0" allowFullScreen> </iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.layer7tech.com/blogs/index.php/api-design-tutorial-the-interaction-model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
