I would like to expose some data to client applications via HTTP. For example, the client would go to URL: http://mysite.com/books/12345 to obtain data about book 12345. The client could do an HTTP PUT or POST to http://mysite.com/books/54321 to upload data about book 54321. Is this known as a RESTful web service?
I have no idea where to start though. I would like to write the server logic in C#/.NET keeping in mind the clients will be using non-Microsoft technologies such as C++, Objective-C, and Java, so I don't want to get locked into something that only works in the Microsoft .NET environment. The clients will also be running over cellular connections with limited bandwidth. I would like to use a compact and portable protocol over HTTP like Google Protocol Buffers to allow communications between different languages and platforms.
Which Microsoft technology should I use to write a RESTful web service like I described in my first paragraph? Which open source technology could I use to write the RESTful web service described in the first paragraph? Does it matter which web server I use? Is it OK to send binary data (protobuf) over a HTTP connection? How would I push new data out to a client from the server?