Службы данных WCF (OData) и веб-API ASP.NET? Гипермедиа?


12

Я разрабатываю распределенное приложение, которое будет состоять из сервисов 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 будет изначально поддерживать гипермедиа к моменту выпуска, или есть какие-либо готовые реализации или примеры, на которые мне стоит обратить внимание?

Благодарность!


2
Хорошие ответы на вопрос 1 до сих пор. У кого-нибудь есть понимание моего второго вопроса?
Раймонд Солтрелли

В некотором роде это пропустили, и я видел термин, но я не уверен, что такое гипермедиа в техническом смысле - есть ли у вас ссылка?
Уайет Барнетт

2
По сути, гипермедиа в контексте REST означает «ленивая нагрузка». Например, если ваш запрос к службе REST возвращает объект, имеющий ссылку на другой объект, эти ссылки представляются в виде ссылки в документе XML, а не включаются ссылочным объектом во всей его полноте. Если вы хотите получить информацию об указанном объекте, просто перейдите по ссылке. dret.net/lectures/ppos-spring11/reading/…
Рэймонд Сэлтрелли

1
Еще одно хорошее описание гипермедиа в отношении REST. timelessrepo.com/haters-gonna-hateoas
Рэймонд Солтрелли

Ответы:


2

Веб-API делает odata. Смотрите сообщение в блоге Скотта Гатри . В частности:

Состав запросов: Web API позволяет легко поддерживать запросы через соглашения OData URL. Когда вы возвращаете тип IQueryable из своего веб-API, платформа автоматически обеспечивает поддержку запросов OData, облегчая реализацию разбиения на страницы и сортировки.

Я также думаю, что во многих случаях один и тот же класс может быть традиционным классом WCF и классом Web API, они определенно не являются взаимоисключающими.


2

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, вероятно, будет лучшим выбором ..

Опять же, это все от исследований и игр. Я не реализовал ни в сценарии производства / полномасштабного приложения. Я думаю, что у них обоих будут свои сильные и слабые стороны, и определенно есть некоторые совпадения


2

С точки зрения гипермедиа, безусловно, веб-API. OData, основанная на AtomPub, это просто способ предоставления базы данных с использованием HTTP, вы получаете только ограниченный набор предопределенных передач состояний (CRUD). С другой стороны, гипермедиа-сервис похож на приложение, предназначенное для клиента. С помощью веб-API вы можете встраивать все нужные вам ссылки, а также использовать синтаксис запросов OData. На самом деле, лучшее решение для гипермедиа в стеке Microsoft - это ASP.NET MVC, если вы хотите использовать HTML в качестве базового формата.


2
Есть ли в Интернете примеры того, как реализовать это с помощью веб-API?
Рэймонд Солтрелли


Вы все еще поддерживаете это мнение добавлением действий в odata v3 ( odata.org/media/30002/OData.html#actions )?
Крис Дамур
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.