Я разрабатываю распределенное приложение, которое будет состоять из сервисов REST и множества клиентов (Silverlight, iOS, Windows Phone 7 и т. Д.). Я был готов принять решение о том, что буду реализовывать свои REST-сервисы с использованием WCF Data Services (OData), но теперь веб-API MVC 4 заставил меня усомниться в этом решении.
Что мне понравилось в OData, так это возможности URI-запросов и гипермедиа, которые вы получаете бесплатно. Что мне не понравилось, так это многословность полезной нагрузки OData; много ненужных персонажей, приходящих по проводам.
Что мне нравится в веб-API, так это то, что полезные данные гораздо более краткие, и у них есть возможность запрашивать URI OData, однако, похоже, что в нем отсутствует гипермедиа (по крайней мере, из коробки). Мой начальник также настаивает на веб-API, потому что «силы, которые есть в Microsoft, поддерживают его, а OData не набирает обороты».
Итак, у меня есть два вопроса:
1) Кто-нибудь может прокомментировать поддержку / тягу Web API и OData?
2) Ожидается ли, что Web API будет изначально поддерживать гипермедиа к моменту выпуска, или есть какие-либо готовые реализации или примеры, на которые мне стоит обратить внимание?
Благодарность!
источник
Ответы:
Веб-API делает odata. Смотрите сообщение в блоге Скотта Гатри . В частности:
Я также думаю, что во многих случаях один и тот же класс может быть традиционным классом WCF и классом Web API, они определенно не являются взаимоисключающими.
источник
Web API использует преимущества протокола http более естественным образом. Одата - это открытый стандарт, принятый многими крупными игроками. Я могу говорить только из своего опыта, связанного с Odata, и недавно открыв веб-API и проводя некоторые исследования.
OData - это круто, потому что это актуальный стандарт. Вы можете легко создать базу данных и выставить ее через HTTP. Это означает, что вы можете обходить структуру таблицы без какой-либо конфигурации (я говорю это свободно). Вы также можете выполнять запросы через URL, который может включать в себя несколько легких LINQ:
Это возможно хорошо или плохо. Аутентификация стандартная и встроенная.
Веб-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, вероятно, будет лучшим выбором ..
Опять же, это все от исследований и игр. Я не реализовал ни в сценарии производства / полномасштабного приложения. Я думаю, что у них обоих будут свои сильные и слабые стороны, и определенно есть некоторые совпадения
источник
С точки зрения гипермедиа, безусловно, веб-API. OData, основанная на AtomPub, это просто способ предоставления базы данных с использованием HTTP, вы получаете только ограниченный набор предопределенных передач состояний (CRUD). С другой стороны, гипермедиа-сервис похож на приложение, предназначенное для клиента. С помощью веб-API вы можете встраивать все нужные вам ссылки, а также использовать синтаксис запросов OData. На самом деле, лучшее решение для гипермедиа в стеке Microsoft - это ASP.NET MVC, если вы хотите использовать HTML в качестве базового формата.
источник