Serviços de dados WCF (OData) versus API da Web do ASP.NET? Hipermídia?


12

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!


2
Boas respostas para a pergunta 1 até agora. Alguém tem alguma idéia da minha segunda pergunta?
Raymond Saltrelli

Meio que perdi isso, e eu já vi o termo, mas não tenho certeza do que a hipermídia é no sentido técnico - você tem um link?
Wyatt Barnett

2
Basicamente, hipermídia no contexto do REST significa "carga lenta". Por exemplo, se sua solicitação para um serviço REST retornar um objeto que tenha uma referência a outro objeto, essas referências serão representadas como um link no documento XML, em vez de incluir o objeto referenciado na sua totalidade. Se você quiser informações sobre o objeto referenciado, basta seguir o link. dret.net/lectures/ppos-spring11/reading/...
Raymond Saltrelli

1
Outra boa descrição da hipermídia em relação ao REST. timelessrepo.com/haters-gonna-hateoas #
Raymond Saltrelli #

Respostas:


2

API da Web faz odata. Veja a publicação no blog de Scott Guthrie . Especificamente:

Composição da consulta: a API da Web permite que você ofereça suporte facilmente à consulta por meio das convenções de URL do OData. Quando você retorna um tipo de IQueryable da sua API da Web, a estrutura fornece automaticamente suporte a consultas OData sobre ele, facilitando a implementação de paginação e classificação.

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.


2

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


2

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.


2
Existem exemplos online de como implementar isso usando a API da Web?
Raymond Saltrelli 03/03/2012


você ainda apoia esta opinião com a adição de ações no odata v3 ( odata.org/media/30002/OData.html#actions )?
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.