Some .NET-specific info: If you're on the latest version of the .NET Framework, look at using
http://www.asp.net/web-api. I've done a lot on top of
ASP.NET MVC prior to Web API's availability. One lesson I've learned: do your best to avoid mapping. Query fields from a database or use denormalized read models. Mapping gets out of hand very quickly. If necessary, Automapper is very helpful. It eliminates left-right coding.
Regarding how to build an architecture for this, I think there are a lot of principles here that are platform agnostic. I apologize if this gets a little verbose as I nerd out for a minute.
Model Separation: As use case complexity increases, the benefits of model separation increase. Logically, these are all different representations: data model, domain model, application model, reporting model. While this may be true, it might not make sense to separate all these in code if your use cases are very simple (CRUD-ish, for instance). The most complex use cases will use all of the above.
The following represents a growth path as use case complexity increases.
API Over Data Model: If you're looking for an API over data, check out OData[1], as Glenn suggested. An alternative that I promote from time to time is Collection+JSON[2]. OData has good support on the .NET Framework. I'm not sure about Collection+JSON. This is great when there is little to no behavior happening behind the scenes and you really need full-featured querying with CRUD.
API Over Domain Model: Designs in this arena may utilize some kind of ORM (Entity Framework, NHibernate, etc.) to hydrate "business"-layer objects that contain behavior specific to the problem domain of your application. Look to Domain Driven Design[3] for good pointers here. There's a step up here when your complexity starts to grow. It's common to start separating how reads are handled from writes. CQRS[4] provides lots of good guidance in this space. Without CQRS, an API will often use property getters of the Domain Model to build API responses. This is already the start of a leak in your Domain Model, which may lead to...
API Over Application Model: It may make sense to derive an Application Model from a Domain Model. When resources are modified in your API, the changes typically route through the Domain Model. When resource representations are fetched, they may be reading from a denormalized data store (document databases start working really well here) that has pre-populated application-specific models to serve through your API.
API Over Reporting Model: This is almost a parallel evolution with the the API Over Application Model concept. The model being served might be coming from denormalized data. This is typically read-only and may look more like API Over Data Model in implementation. Complex analytics over this is a whole different beast.
Every question regarding design complexity comes back to... "It depends on your use cases." Every step of architectural complexity comes at a price. Make sure to always do at least some cost-benefit analysis before heading down one of these rabbit holes. Good luck! :)
--