<?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>Flavio Ishii &#187; API Tools</title>
	<atom:link href="http://www.flavioishii.com/tag/api-tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.flavioishii.com</link>
	<description>&#34;Live as if you were to die tomorrow. Learn as if you were to live forever.” Mahatma Gandhi</description>
	<lastBuildDate>Tue, 29 Mar 2011 03:37:39 +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>Guidelines for Designing an API</title>
		<link>http://www.flavioishii.com/2009/10/guidelines-for-designing-an-api/</link>
		<comments>http://www.flavioishii.com/2009/10/guidelines-for-designing-an-api/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 23:15:11 +0000</pubDate>
		<dc:creator>flavio</dc:creator>
				<category><![CDATA[About]]></category>
		<category><![CDATA[3scale]]></category>
		<category><![CDATA[API Design]]></category>
		<category><![CDATA[API Tools]]></category>
		<category><![CDATA[Apigee]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[Google App Engine]]></category>

		<guid isPermaLink="false">http://www.flavioishii.com/?p=129</guid>
		<description><![CDATA[In my quest for knowledge on how to design an API, I found some very useful resources and tools. There is much to discuss and read on this topic, and on this post I recommend a few starting points.]]></description>
			<content:encoded><![CDATA[<p>In my quest for knowledge on how to design an API, I found some very useful resources and tools. There is much to discuss and read on this topic, and on this post I recommend a few starting points. I&#8217;ve worked with (consumed) quite a few API services. Some are a pleasure to work with, but others are not. One particular API I worked with broke all the rules mentioned in the Joshua&#8217;s video below. It&#8217;s actually quite funny, now, but it was a pain to figure it out and communicate with them. So, if you are thinking about creating an API service, especially an open API service, please, please follow the design considerations from the resources mentioned below or other similar experienced parties.<span id="more-129"></span></p>
<p><strong>What is an API?</strong><br />
In plain terms it is a library of code accessible from different components of a software system or from third party applications. Used by developers in order to integrate with existing systems and encourage code re-use. Served and consumed by Web applications, mobile applications, cloud servers, private servers&#8230;</p>
<p><strong>Why would I build an API?</strong><br />
Perhaps you want to organize your code into an API and sell it as services to third party developers. My own reason is for supporting various client platforms from one core code base.</p>
<p><strong>How do I design an API?</strong><br />
The truth is, all developers are API developers by nature, but most of us just need more discipline. Software Engineering principles are applied when designing an API, as demonstrated below by Chief Java Architect at Google and author of <a title="Effective Java" href="http://bit.ly/Wsyio" target="_blank">Effective Java</a>, Joshua Bloch.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/aAb7hSCtvGw&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/aAb7hSCtvGw&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Joshua went into a lot of issues for designing API&#8217;s but there is a lot more to it than that. For instance how do you protect your API? How should you analyze its usage? You can find more details on these issues in a <a title="Is Your API Naked?" href="http://bit.ly/2WVts" target="_blank">paper</a> produced by <a title="Sonoaa Systems" href="http://www.sonoasystems.com/" target="_blank">Sonoa Systems</a>.</p>
<p><strong>Are there tools for API&#8217;s?</strong><br />
Cloud providers may have their own built in security mechanisms and analytic tools, but they may not be suited to your needs or you may not even have access to them.</p>
<p>There is a cloud-based solution that provides protection and analytics called <a title="Apigee" href="http://www.apigee.com/" target="_blank">Apigee</a> (app-e-gee) from <a title="Sonoaa Systems" href="http://www.sonoasystems.com/" target="_blank">Sonoa Systems</a>. A <a title="New York Times on Sonoa Systems." href="http://bit.ly/QFGXx" target="_blank">New York Times article</a> on the former Microsoft Open-source Chief, now part of the Sonoa team, gives a little background and introduction of the company. Apigee is hosted in EC2 so if your API is hosted in EC2 as well you&#8217;ll get some communication performance advantage. The video below gives you a quick glimpse of Apigee in action.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/FQ3XMmSxKK4&amp;rel=0&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/FQ3XMmSxKK4&amp;rel=0&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>I&#8217;ve signed up for a free Apigee account and I&#8217;m excited to use it, once my API is finished.</p>
<p>Update: Please check out Guillaume&#8217;s comment below, there&#8217;s a similar tool by <a title="3scale" href="http://www.3scale.net/" target="_blank">3scale</a>. Something interesting that you can do with their solution, <strong>but not limited to</strong>, is use a plugin for Google App Engine!</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/AMDIpVDVPHQ&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/AMDIpVDVPHQ&amp;hl=en&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><strong>Where should I host my API?</strong><br />
There are really only two choices here: in the cloud or in a private network. It depends on your needs. My preference is in the cloud because I don&#8217;t have the resources or the desire to administer an IT infrastructure.</p>
<p><strong>Other resources:</strong><br />
<a title="This Little Manual of API Desin" href="http://chaos.troll.no/~shausman/api-design/api-design.pdf">This Little Manual of API Design</a><br />
<a title="Media API: Security Best Practices" href="http://bit.ly/DmxJV" target="_blank">Media API: Security Best Practices</a><br />
If you have any resources please share them below. I&#8217;m still learning as well <img src='http://www.flavioishii.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.flavioishii.com/2009/10/guidelines-for-designing-an-api/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

