A Web Services interface for a public website?

My website The Restaurant Thing is a simple ASP site that I’ve been running for a number of years now.  It’s a database of restaurants in Ottawa, that users can update themselves.  I created this because it seems like every other restaurant review site contains canned reviews that don’t really tell you what the restaurant is like.

Anyway, I’m giving the site a fresh coat of paint by way of redeveloping it using the ASP.NET, and in the process, I’m developing a web services interface for this sort of database.  I’ve exposed the web service here, and a test version of the new Restaurant Thing (not using the same data as the main site) is here

I’m trying to decide whether I should leave the Web Service exposed to the general public, or restrict it to my own use and the use of anyone who asks for it and has a good reason to want access to it.

The issues are:

  • Exposing it for anyone to access means anyone can simply retrieve all my data through the Web Service and start their own competing site.  Not likely for two reasons:  First, they can do that by scrapin the HTML anyway, and second, why would you want to compete?  It’s not like there’s any money in doing this.. :)
  • Someone could use my Web Service interface to integrate my data with their own application in ways I haven’t thought of.  That’s the main argument for exposing it.
  • Another argument in favour of exposing it is that the bandwidth used for typical requests would be much lower.  If I wrote a smart client app that displayed restaurant data, and fetched the data through the web services interface, then the bandwidth used for typical operations like finding a particular restaurant, adding a comment, etc., would be greatly reduced.
  • I do make a few dollars off of Google ad revenue (not even enough to pay for hosting but hey something is better than nothing) and if someone develops a custom client to access my data, then I’m not going to see any ad revenue.  I think this is the main reason more sites don’t expose access to their data programmatically.

Right now I’m leaning slightly towards not leaving the interface exposed.