Estoy diseñando una aplicación distribuida que consistirá en servicios REST y una variedad de clientes (Silverlight, iOS, Windows Phone 7, etc.). Estaba listo para decidir que implementaría mis servicios REST utilizando WCF Data Services (OData), pero ahora la MVC 4 Web API me ha hecho cuestionar esa decisión.
Lo que me gustó de OData fueron las consultas de URI y las capacidades de hipermedia que obtienes de forma gratuita. Lo que no me gustó fue la verbosidad de la carga útil de OData; muchos caracteres innecesarios que pasan por el cable.
Lo que me gusta de la API web es que las cargas útiles son mucho más concisas y tiene la capacidad de consulta de URI de OData, sin embargo, parece que carece de hipermedia (al menos desde el primer momento). Mi jefe también está presionando por la API web porque "los poderes que están en Microsoft la respaldan y OData no ha estado ganando terreno".
Entonces tengo dos preguntas:
1) ¿Alguien puede comentar sobre el respaldo / tracción de la API web y OData?
2) ¿Se espera que la API web admita de forma nativa hipermedia en el momento del lanzamiento o hay implementaciones o ejemplos disponibles que debería analizar?
¡Gracias!
fuente
Respuestas:
API web hace odata. Ver la publicación del blog de Scott Guthrie . Específicamente:
También creo que, en muchos casos, la misma clase podría ser la clase WCF tradicional y la clase API web, definitivamente no son mutuamente excluyentes.
fuente
La API web aprovecha el protocolo http de forma más nativa. Odata es un estándar abierto aceptado por muchos de los grandes jugadores. Solo puedo hablar desde mi experiencia jugando con Odata, y recientemente descubriendo API web e investigando un poco.
OData es genial porque es un estándar real. Puede crear fácilmente una base de datos y exponerla a través de HTTP. Esto significa que puede atravesar la estructura de su tabla sin ninguna configuración (lo digo libremente). También puede ejecutar consultas a través de la URL que puede incluir algo de LINQ ligero:
Esto es posiblemente bueno o malo. La autenticación es estándar y la construyó.
API web, es más interesante desde mi perspectiva. Utilizó la funcionalidad HTTP (mensajes de error, et al.) Y es un poco más "nativo" que las solicitudes RESTful verdaderas. Realmente no he jugado demasiado con eso ... Pero he leído y he "escuchado" que MVC y Web API pueden estar "casados" algún día, de nuevo, tal vez bueno tal vez malo ...
Cuando estaba jugando con OData, creé un proceso almacenado, lo asigné a la superficie de la entidad, configuré un tipo de retorno fuerte y luego lo conecté a una solicitud de URL y BANG, ahí está mi solicitud RESTful asignada a mi proceso almacenado de resultados escritos. Fue bastante sencillo y pude obtener exactamente lo que necesitaba.
En conclusión, no he tenido la oportunidad de jugar con WCF API con demasiados detalles, pero diría que es el camino a seguir para el desarrollo del cliente, ya que es más un enfoque purista para REST. Si va a hacer más o menos llamadas "directas" de ida y vuelta y recuperar "Ver modelos", proporcionará una interacción más nativa.
Por otra parte. Si va a realizar consultas complejas (ish) sobre los datos en función de la interacción con el cliente y desea "construir" la lógica de consulta y pasarla como parámetro, entonces Odata podría funcionar.
La forma en que lo veo es si necesito exponer mis datos en un formato estructural (que significa estructura de tabla / relación) y luego consultarlo directamente desde un cliente, entonces Odata funcionará mejor. También es bueno para permitir que "Otros" accedan a los datos (con la autenticación adecuada, etc.), por lo que se adhiere al protocolo OData
Si desea solicitudes RESTful donde dicta la URL (/ productos / pedidos / 22 y crea complejos "conjuntos de resultados" a partir de su código administrado "oculto" y estructura de datos Y también puede beneficiarse de los mensajes de respuesta HTTP, entonces el La API web probablemente sería la mejor apuesta.
De nuevo, esto es todo de la investigación y el juego. Tampoco lo he implementado en un escenario de producción / aplicación completa. Creo que ambos tendrán sus fortalezas y debilidades, y definitivamente hay cierta superposición
fuente
Desde el punto de vista hipermedia definitivamente Web API. OData, que se basa en AtomPub, es solo una forma de exponer una base de datos utilizando HTTP, solo obtiene un conjunto limitado de transferencias de estado predefinidas (CRUD). Por otro lado, un servicio de hipermedia es como una aplicación, diseñada para el cliente. Con Web API puede incrustar todos los enlaces que desee, además de usar la sintaxis de consulta OData. En realidad, la mejor solución de hipermedia en la pila de Microsoft es ASP.NET MVC, si está dispuesto a usar HTML como formato base.
fuente