I’ve used WCF for SOAP-based web services for many years and have generally been happy with it (configuration aside). I recently began looking into REST-based web services on WCF and was pleasantly surprised that it was a fairly straightforward extension of the WCF model for dealing with web services. I especially liked the fact that URI-mapping information was co-located right next to the entry point via an attribute. Win, Microsoft!
I learned that WCF REST services have been deprecated in favor of the ASP.NET Web API. (Forget for the moment that the deprecation occurred before the replacement was officially available…) So another round of research begins as I started to learn about the new thing. But I remember when WCF was the new thing, so I guess this is the new, new thing. But in fact COM was the new thing before WCF, so I guess we’re at the new^3 thing now. That’s understandable, even desirable. If it means learning a new API every 6 to 7 years that’s ok.
But here is the problem: every time the API is reworked, new stuff is added and the “framework” being provided bloats to include more aspects of the surrounding environment. The ASP.NET Web API is actually just part of a broader ASP change that introduces other features such as MVC, different data integration systems for the back-end, etc. All of this stuff is then bundled into new project templates. The whole thing is like some monstrous blob, slowly and painfully engulfing all of reality…
All I want to do is define some REST services. I’m not doing it in the context of an ASP.NET application. So now I have to sort through a massive amount of new cruft just to figure out which parts are important to me. Then I can delete all the template code and structure it in a production-worthy manner. (More on the evils of project templates and code-generation in the future.)
I appreciate that MS is trying to centralize the creation of REST services in the web-based portion of their product offering, and even applaud them for that. But why does that necessarily require the bundling of that function with all the other stuff? Sure, they are components that are often used in conjunction but that doesn’t mean that the designs have to be tightly coupled to such a degree.
It wouldn’t be so irksome, but for the fact that frameworks (and MS frameworks in particular) seem to be geared more and more to the lowest common denominator. I think its great that people with little to no programming experience can play with the new technologies and make “Hello world” programs in 5 minutes flat, but that doesn’t help me deliver viable products.
Just as a follow-up: After researching the Web API I’ve decided to use it going forward for my REST web services needs. I don’t think it is a vast improvement over WCF, but it does eliminate some configuration files. Creating a ASP.Net MVC Web API project from a template starts with an incredible amount of cruft relating to a web app that is utterly unnecessary if all you are implementing are services though, so I’ll have to sort through all that. Unfortunately, since the Web API is so new there aren’t a lot of ready-made references on the web that go beyond the very basics.