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.