WCF Data Services (OData) Vs ASP.NET Web API? Гіпермедіа?


12

Я розробляю розподілене додаток, яке буде складатися з REST-послуг та різноманітних клієнтів (Silverlight, iOS, Windows Phone 7 тощо). Я був готовий вирішити, що я буду реалізовувати свої послуги REST за допомогою служб передачі даних WCF (OData), але тепер веб-API MVC 4 змусив мене поставити під сумнів це рішення.

Що мені сподобалось у OData - це можливості запиту URI та гіпермедіа, які ви отримуєте безкоштовно. Мені не подобалось багатослівність корисного навантаження OData; багато непотрібних символів, що надходять через дріт.

Що мені подобається у веб-API, це те, що корисні навантаження є набагато більш короткими і він має можливість запиту URI ODAta, однак, здається, йому не вистачає гіпермедіа (як мінімум, у вікні). Мій бос також наполягає на веб-API, оскільки "повноваження, які є у Microsoft, підтримують це, а OData не отримує тяги".

Тож у мене є два питання:

1) Чи може хтось коментувати резервне копіювання / тягу Web API та OData?

2) Чи очікується, що веб-API спочатку підтримує гіпермедіа до часу випуску чи є якісь позапрограмні реалізації чи приклади, які я повинен розглянути?

Дякую!


2
Хороші відповіді на питання 1 поки. Хтось має розуміння мого другого питання?
Реймонд Сальтреллі

Я щось пропустив, і я бачив цей термін, але я не впевнений, що таке гіпермедіа в технічному розумінні - у вас є посилання?
Wyatt Barnett

2
В основному, гіпермедіа в контексті REST означає "ледаче навантаження". Наприклад, якщо ваш запит на послугу REST повертає об'єкт, на який є посилання на інший об'єкт, посилання представлені як посилання в документі XML, як протилежне включенню посиланого об'єкта в повному обсязі. Якщо ви хочете отримати інформацію про посилається об'єкт, просто перейдіть за посиланням. dret.net/lectures/ppos-spring11/reading/…
Raymond Saltrelli

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

Відповіді:


2

Веб-API робить одата. Дивіться повідомлення в блозі Скотта Гетрі . Конкретно:

Структура запитів: Веб-API дозволяє вам легко підтримувати запит через конвенції URL-адреси OData. Коли ви повернете тип IQueryable з веб-API, фреймворк автоматично надає підтримку для запитів OData - полегшуючи виконання підкачки та сортування.

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


2

Веб-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. Це було досить просто, і я зміг отримати саме те, що мені потрібно.

На закінчення у мене не було можливості грати з WCF API занадто багато деталей, але я б сказав, що це шлях для розвитку клієнтів, оскільки це більше пуристичний підхід до REST. Якщо ви будете здійснювати більш-менш "прямі" дзвінки вперед-назад та отримувати "Перегляд моделей", це забезпечить більш рідну взаємодію.

З іншого боку. Якщо ви будете робити складні (ish) запити на основі даних, що базуються на взаємодії з клієнтом, і ви хочете "побудувати" логіку запиту і передати її як параметр, тоді Odata може працювати.

Те, як я дивлюся на це, якщо мені потрібно виставити свої дані у структурному форматі (мається на увазі таблиця / структура відносин), а потім запитувати їх безпосередньо у клієнта, тоді Odata буде працювати найкраще. Це також добре для дозволу "Іншим" отримувати доступ до даних (з належним auth і т. Д.), Тому він дотримується протоколу OData

Якщо ви хочете RESTful запити, коли ви диктуєте URL (/ товари / замовлення / 22 та створюєте складні "набори результатів" зі свого "прихованого" керованого коду та структури даних. І ви також можете скористатися повідомленнями HTTP-відповідей, тоді Веб-API, мабуть, найкращий варіант ..

знову ж таки, це все від досліджень та ігор. Я не реалізовувався ні в сценарії виробництва, ні в повному обсязі. Я думаю, що у них будуть і свої сильні, і слабкі сторони, і певне перекриття напевно є


2

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


2
Чи є приклади в Інтернеті, як реалізувати це за допомогою Web API?
Реймонд Сальтреллі


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