Estou projetando um aplicativo distribuído que consistirá em serviços REST e em uma variedade de clientes (Silverlight, iOS, Windows Phone 7, etc.). Eu estava pronto para decidir que implementaria meus serviços REST usando o WCF Data Services (OData), mas agora a API da Web MVC 4 me fez questionar essa decisão.
O que eu gostei no OData foram os recursos de consulta e hipermídia do URI que você obtém gratuitamente. O que eu não gostei foi a verbosidade da carga útil do OData; muitos caracteres desnecessários passando por cima do fio.
O que eu gosto na API da Web é que as cargas úteis são muito mais concisas e possuem o recurso de consulta de URI do OData, no entanto, parece estar faltando hipermídia (fora da caixa, pelo menos). Meu chefe também está pressionando pela API da Web porque "os poderes da Microsoft estão apoiando e o OData não está recebendo força".
Então, eu tenho duas perguntas:
1) Alguém pode comentar sobre o apoio / tração da API da Web e OData?
2) Espera-se que a API da Web ofereça suporte nativo à hipermídia no momento do lançamento ou há implementações ou exemplos prontos para uso que eu deva analisar?
Obrigado!
fonte
Respostas:
API da Web faz odata. Veja a publicação no blog de Scott Guthrie . Especificamente:
Eu também acho que, em muitos casos, a mesma classe poderia ser a classe WCF tradicional e a classe API da Web, elas definitivamente não são mutuamente exclusivas.
fonte
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:
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
fonte
Do ponto de vista da hipermídia, definitivamente a API da Web. O OData, que é baseado no AtomPub, é apenas uma maneira de expor um banco de dados usando HTTP, você obtém apenas um conjunto limitado de transferências de estado predefinidas (CRUD). Por outro lado, um serviço hipermídia é como um aplicativo personalizado para o cliente. Com a API da Web, você pode incorporar todos os links que desejar, além de usar a sintaxe de consulta OData. Na verdade, a melhor solução de hipermídia na pilha da Microsoft é o ASP.NET MVC, se você estiver disposto a usar o HTML como formato base.
fonte