Web API использует преимущества протокола http более естественным образом. Одата - это открытый стандарт, принятый многими крупными игроками. Я могу говорить только из своего опыта, связанного с Odata, и недавно открыв веб-API и проводя некоторые исследования.
OData - это круто, потому что это актуальный стандарт. Вы можете легко создать базу данных и выставить ее через HTTP. Это означает, что вы можете обходить структуру таблицы без какой-либо конфигурации (я говорю это свободно). Вы также можете выполнять запросы через URL, который может включать в себя несколько легких LINQ:
/products/orders/[put some linq-ish query here]
Это возможно хорошо или плохо. Аутентификация стандартная и встроенная.
Веб-API, более интересный с моей точки зрения. Он использовал функциональность HTTP (сообщения об ошибках и т. Д.) И немного более "родной" для истинных запросов RESTful. Я действительно не слишком много с этим играл ... Но я читал и вроде как "слышал", что MVC и Web API могут когда-нибудь быть "женатыми", опять же, возможно, хорошо, а может и плохо ...
Когда я играл с OData, я создал Stored Proc, отобразил его на поверхность сущности, настроил тип строгого возврата, а затем подключил его к URL-запросу и BANG, мой RESTful-запрос был сопоставлен с моим типизированным результатом, сохраненным proc. Это было довольно просто, и я смог получить именно то, что мне нужно.
В заключение
у меня не было возможности поиграть с API WCF слишком подробно, но я бы сказал, что это путь для развития клиента, так как это скорее пуристический подход к REST. Если вы собираетесь делать более или менее «прямые» вызовы назад и вперед и извлекать «Просмотр моделей», это обеспечит более естественное взаимодействие.
С другой стороны. Если вы будете выполнять сложные (ish) запросы к данным на основе взаимодействия с клиентом и хотите "построить" логику запроса и передать ее в качестве параметра, тогда Odata может сработать.
Я смотрю на это так: если мне нужно представить свои данные в структурном формате (то есть структуру таблицы / отношения), а затем запросить их напрямую из клиента, тогда Odata будет работать лучше всего. Это также хорошо для предоставления «Другим» доступа к данным (с надлежащей аутентификацией и т. Д.), Поэтому он придерживается протокола OData.
Если вам нужны запросы RESTful, в которых вы диктуете URL (/ products / orders / 22 и создаете сложные «наборы результатов» из своего «скрытого» управляемого кода и структуры данных И вы также можете воспользоваться ответными сообщениями HTTP, тогда Веб-API, вероятно, будет лучшим выбором ..
Опять же, это все от исследований и игр. Я не реализовал ни в сценарии производства / полномасштабного приложения. Я думаю, что у них обоих будут свои сильные и слабые стороны, и определенно есть некоторые совпадения