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:
/products/orders/[put some linq-ish query here]
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