Ответ 1
Я действительно реализовал или в настоящее время использую все 3 опубликованных варианта, поэтому я дам свое решение. Теперь, когда вы выяснили, на что вы ищете, немного легче ответить.
ODataSTRONG >
OData отлично подходит для внутренних приложений, когда:
- Вы являетесь одновременно сервером и клиентом.
- Вы используете Entity Framework.
- Вы не используете наследование в своих моделях и не ожидаете запроса подкатегорий.
Odata потрясающе, потому что вы можете использовать IQueryable на стороне клиента. Однако это связано с некоторыми ограничениями. У двух из моей головы есть то, что вы работаете с унаследованными моделями немного неудобно, и вы не можете делать вложенные коллекции.
Также существует проблема с тем, что не знаю, что поддерживает поддерживаемые возможности LINQ.
Я бы порекомендовал OData, вам абсолютно необходим уровень сервиса, и вы только планируете выполнять с ними простые операции CRUD. Основная проблема с каждой проблемой OData приводит к жесткой стене, которую вы просто не можете обойти. Клиентский потребительский код действительно лучшая часть, и если вы не используете С#, чтобы потреблять его, вероятно, этого не стоит.
Также, не используя поддержку авто метаданных EF, вы будете писать столько же кода, чтобы соответствовать схеме, к которой ваши потребители могут или не могут писать. Хотя для OData существует оболочка Rails, все это относительно новое. Я не вижу OData в дикой природе, кроме действительно больших партнеров MS.
Аутентификация и фильтрация OData также являются довольно голой бандой. Вы сами будете писать много разрешающего кода, если вам нужно ограничить данные. Если вы хотите, чтобы SELECT * FROM TABLE был ограничен разрешениями, вы должны быть готовы написать какой-то неудобный код.
MVC 2
MVC очень хорош для создания службы RESTful. У вас есть поддержка глагола, а return JSONResult
- это просто. Единственным потенциальным недостатком является то, что вы кодируете большую часть обработки ошибок самостоятельно, и все ваши модели просмотра должны наследоваться от базового класса, который показывает коды состояния и сообщения об ошибках.
Вы также можете немного настроить механизм просмотра в зависимости от того, насколько вы хотите, чтобы ваши сообщения отвечали за причудливость или условность. ОГРОМНОЕ преимущество для MVC - это очень расширяемое, и вы можете делать почти все, что захотите. Я очень люблю комбинировать формы /ajax calls/и службы отдыха в одно и то же действие контроллера. Внесите один раз, получите три аромата одной и той же операции. Было бы сложно сделать MVC коротким, потому что его можно скрутить, чтобы сделать практически все, что вам нужно.
Большим преимуществом для службы MVC является то, что вы можете прокрасться немного интерфейса администратора в приложение, которое развертывается вместе с сервисом. Очень удобно не размещать два сайта.
WCF REST
Итак, я использую только WCF-отдых в очень ограниченной емкости, и кажется... хорошо... Я использовал WCF уже 3 года, и я всегда недовольна тем, насколько сложно скомпрометировать его. Точно так же, как ODATA, вы быстро столкнетесь с закрытыми классами и нерастяжимыми пещерами функциональности, если вы уйдете с проторенного пути. Это находится в прямом контрасте с величиной расширяемости MVC.
Другая проблема - ваше здание поверх WCF и все безумие, которое сопровождает его. Я всегда говорил, что требуется, чтобы PhD эффективно использовал WCF. У Рика Стралла была хорошая статья о болевых точках WCF REST. Не уверен, что все изменилось, но его стоит прочитать.
WCF REST выглядит действительно многообещающим, и я использую его прямо сейчас, я просто не знаю достаточно об этом, чтобы рекомендовать.
Основные моменты
-
Если вы не знаете своих потребителей, я бы предположил, что вы не знаете свой API. Не создавайте службу до тех пор, пока у вас нет прецедента, и вы можете ее прописать.
-
MVC является наиболее расширяемым, и если вы знакомы с тем, как все работает под обложками, вам, вероятно, будет лучше, чем реализовать сложную задачу MS, такую как OData и WCF.
-
Все "большие мальчики", такие как Facebook, Amazon, PayPal, Ebay имеют API, которые не соответствуют любому известному шаблону или схеме, например OData. Ваш сервис REST - это то, что вы делаете. Это относится к № 1. Сосредоточьтесь на том, чтобы облегчить работу с первым потребителем.