A API da Web tira proveito do protocolo http de forma mais nativa. Odata é um padrão aberto adotado por muitos dos grandes jogadores. Só posso falar da minha experiência com o Odata, e recentemente descobrindo a Web API e fazendo algumas pesquisas.
OData é legal porque é um padrão real. Você pode facilmente criar um banco de dados e expô-lo por HTTP. Isso significa que você pode percorrer a estrutura da sua tabela sem nenhuma configuração (digo isso livremente). Você também pode executar consultas através do URL, que pode incluir alguns LINQ leves:
/products/orders/[put some linq-ish query here]
Isto é sem dúvida bom ou ruim. A autenticação é padrão e a construiu.
API Web, é mais interessante da minha perspectiva. Utilizou a funcionalidade HTTP (mensagens de erro, etc.) e é um pouco mais "nativa" para solicitações RESTful verdadeiras. Eu realmente não brinquei muito com isso .. Mas eu li e ouvi dizer que o MVC e a Web API podem estar "casados" algum dia, novamente, talvez seja bom, talvez seja ruim ...
Quando eu estava jogando com o OData, criei um Proc armazenado, mapeei-o na superfície da entidade, configurei um tipo de retorno forte e vinculei-o a uma solicitação de URL e BANG, há minha solicitação RESTful mapeada para meu proc armazenado com resultado digitado. Era bastante simples e consegui exatamente o que precisava.
Em conclusão
, não tive a chance de brincar com a API WCF com muitos detalhes, mas eu diria que é o caminho a seguir para o desenvolvimento do cliente, pois é uma abordagem mais purista do REST. Se você fizer mais ou menos chamadas "diretas" de vaivém e recuperar "Exibir modelos", isso proporcionará uma interação mais nativa.
Por outro lado. Se você estiver fazendo consultas complexas (ish) nos dados com base na interação do cliente e desejar "construir" a lógica da consulta e passá-la como parâmetro, o Odata poderá funcionar.
A maneira como eu vejo é se preciso expor meus dados em um formato estrutural (ou seja, tabela / estrutura de relacionamento) e depois consultá-los diretamente de um cliente, para que o Odata funcione melhor. Também é bom para permitir que "Outros" acessem os dados (com autenticação adequada etc.), e é por isso que eles aderem ao protocolo OData
Se você deseja solicitações RESTful nas quais está ditando a URL (/ products / orders / 22 e criando "conjuntos de resultados" complexos a partir do código gerenciado "oculto" e da estrutura de dados E também pode se beneficiar das mensagens de resposta HTTP, então o A API da Web provavelmente seria a melhor aposta.
Novamente, isso é tudo de pesquisa e brinquedo. Também não implementei em um cenário de produção / aplicativo completo. Eu acho que ambos terão seus pontos fortes e fracos, e há definitivamente alguma sobreposição