title: What should a developer know before building an API for a community based website?
body: <p>What things should a developer designing and implementing an API for a community based website know before starting the heavy coding? There are a bunch of APIs out there like <a href="http://apiwiki.twitter.com/" rel="noreferrer">Twitter API</a>, <a href="https://developers.facebook.com/docs/reference/api/" rel="noreferrer">Facebook API</a>, <a href="http://www.flickr.com/services/api/" rel="noreferrer">Flickr API</a>, etc which are all good examples. But how would you <a href="http://particletree.com/features/how-to-add-an-api-to-your-web-service/" rel="noreferrer">build your own API</a>?</p>
  
  <p>What technologies would you use? I think it's a good idea to use <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" rel="noreferrer">REST</a>-like interface so that the API is accessible from different platforms/clients/browsers/command line tools (like <a href="http://en.wikipedia.org/wiki/CURL" rel="noreferrer">curl</a>). Am I right? I know that all the principles of web development should be met like caching, availability, scalability, security, protection against potential DOS attacks, validation, etc. And when it comes to APIs some of the most important things are backward compatibility and documentation. Am I missing something?</p>
  
  <p>On the other hand, thinking from user's point of view (I mean the developer who is going to use your API), what would you look for in an API? Good documentation? Lots of code samples?</p>
  
  <p>This question was inspired by <a href="https://stackoverflow.com/users/3043/joel-coehoorn">Joel Coehoorn</a>'s question <a href="https://stackoverflow.com/questions/72394/what-should-a-developer-know-before-building-a-public-web-site">"What should a developer know before building a public web site?"</a>. </p>
  
  <p><strong>This question is a community wiki</strong>, so I hope you will help me put in one place all the things that should be addressed when building an API for a community based website.</p>