For .NET developers the current framework for developing RESTful applications (without resorting to custom HttpHandler’s and what not) is Windows Communication Foundation (WCF). REST-support is a feature that was added on late in the game and partially due to much pressure from the developer community. However WCF is one of those frameworks that is “all things to all men”. It’s the framework that allows any type of distributed communication (SOAP, MSMQ, binary over TCP/IP) making it (IMO) pretty bloated. Because REST was afterthought, resources are exposed using interfaces and ServiceContracts which doesn’t always seem very natural. Additionally, there isn’t inherent support for HTML (or at least I’m not aware of it) and even if your services don’t serve HTML representations, it should still be a format that could easily served (without concatenating strings).

Interestingly, Microsoft has revealed and released bits that they are working on an alternative to ASP.NET namely ASP.NET MVC. While this newer framework trumps up the fact that it allows developers to develop web applications using the MVC design pattern, what I find more intriguing is that as a framework, it allows development of services in a RESTful manner using a web framework (which WCF is not) that can serve all web formats. There are a lot of posts that talk about how ASP.NET MVC can be used RESTfully.

So the question I have is this: Why would anyone use WCF for RESTful web services once ASP.NET MVC is publicly available?


Speaking Technically

One of the interesting things about being a technical guy is that daily I find myself having to communicate technical information to non-technical individuals.  Terms that are common lingo for me, mean absolutely nothing to them.  For example, what does “an asynchronous operation” mean to a functional designer or how do I explain why REST is important to a product manager?

I find that being able to explain technical terms or phrases to non-technical individuals is generally an indication of how well I understand what I’m actually talking about.  The best technical presentations I have heard have always had speakers who were able to explain the most difficult concepts in simple terms.  Good architects should be able to explain technical concepts in layman terms.  This is something I really need to work on.

Anyone have tips on how they do this effectively?