ServiceStack против ASP.Net Web API [закрыто]

299

Я хочу написать новый API в стиле REST и посмотрел на ServiceStack, и он мне очень понравился. Однако я видел, что Microsoft выпустила проект веб-API ASP.Net как часть новой бета-версии MVC 4. Кто-нибудь смотрел на новый проект Web API? Можете ли вы дать какие-либо плюсы / минусы каждой системы?

флип-чарт
источник

Ответы:

389

У них очень похожие сценарии использования. Как ведущий сопровождающий проекта ServiceStack, я хорошо понимаю преимущества ServiceStack и многие естественные преимущества его дизайна на основе сообщений .

ServiceStack существует с 2008 года как проект под управлением OSS с самого начала, с единственной целью продвижения правильного проектирования и реализации удаленных сервисов без трения.

Простой и элегантный дизайн

Стремясь к максимальной простоте, он построен на простом и элегантном ядре - большинство его функций естественным образом связаны с вашими моделями , а не с вашими контроллерами, - это то, что делает MVC, WebApi (как и любая другая платформа веб-служб, разработанная Microsoft). ).

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

Как основная миссия, мы боремся со сложностью на каждом этапе, стремясь сохранить невидимый и ненавязчивый API и избегать введения каких-либо новых концепций или искусственных конструкций, которые еще не знакомы сегодня .NET или разработчикам веб-сервисов.

Например, ваша IService<T>реализация сервиса - это просто стандартный класс C # с автоматически-зависимыми зависимостями. Тонкие и легкие оболочки используются для обеспечения согласованного и унифицированного API для основных типов IHttpRequest и IHttpResponse во время выполнения . Они также разрешают доступ к базовым классам запросов и ответов ASP.NET или HttpListener, поэтому вы никогда не будете ограничены при использовании ServiceStack.

В отличие от WCF и WebApi

Вот краткий обзор контрастных стилей API, которые продвигают ServiceStack и WCF . WebApi отличается от WCF тем, что поощряет разработку REST API. Что касается примеров между двумя, это единственный известный мне пример с одним и тем же сервисом, написанным как в ServiceStack, так и в WebApi .

Лучшие практики удаленных сервисов

ServiceStack уделяет основное внимание простоте, производительности и продвижению лучших практик веб / удаленных сервисов, сосредоточенных вокруг использования шаблонов проектирования удаленных сервисов Мартина Фаулерса в максимально идиоматическом C #:

  • Фасад шаблон - Что предполагает использование batchful, крупнозернистых интерфейсов , когда - либо вы общаетесь через границы процессов.

  • Модель DTO ( MSDN ) - Диктуя использование Pocos специального назначения для создания формата проволоки ваших ответов веб - служб.

  • Шлюз Pattern ( MSDN ) , чтобы инкапсулировать клиент и сервер связь между моделями Client Gateway / DTO и ярусами Service Interface.

Эти шаблоны обеспечивают четкое разделение задач и беспроблемный опыт итеративной разработки.

Расширение возможностей ваших услуг

В своей основе веб-служба ServiceStack сосредоточена на независимом и автоматически подключаемом чистом IService<T>интерфейсе C #, который дает вам полную свободу для определения контракта веб-службы с помощью собственных DTO запросов и ответов с использованием чистых POCO, что делает API-интерфейс ServiceStack практически невидимым и невидимым. -инвазивный, т. е. тривиально извлечь логику сервисов C # и запустить ее вне хоста ServiceStack.

Этот гистограмма является хорошим примером того, что вы получаете только с одним классом C # .cs в ServiceStack :

  • Страницы метаданных для всех зарегистрированных форматов
    • Со ссылками на примеры WSDL, XSD и C # клиента
  • Удобный для просмотра HTML отчет
    • Один автономный снимок html-страницы (т.е. никаких внешних ссылок). Включает встроенный ответ веб-службы JSON - обеспечивает программный доступ к снимкам данных.
  • Встроенный Mini Profiler (порт отличного MVC Mini Profiler )
    • Включает Sql профилирование
  • Конечные точки JSON / JSONP, XML, JSV, CSV и SOAP

Классы RestServiceBase и ServiceBase предназначены для размещения вашей пользовательской логики C # для максимально возможного повторного использования, например, ее DTO-первая конструкция тривиально допускает отложенное и проксируемое выполнение, где ваша же C # Service также может быть размещена и выполнена на MQ Host. что происходит, когда вы регистрируете IMessageServiceподобный хост RedisMQ и вызываете вашу службу через /asynconewayконечную точку (то есть client.SendOneWay()в клиентах C #)

Вы также можете легко делегировать и создавать составные службы, используя base.ResolveService<T>()метод, который возвращает автоматически выбранный экземпляр выбранной службы, как показано в примере службы Nortwind CustomerDetails :

var ordersService = base.ResolveService<OrdersService>();
var ordersResponse = (OrdersResponse)ordersService.Get(
    new Orders { CustomerId = customer.Id });

Возврат простых объектов C #

По большей части ServiceStack будет сериализовать большинство объектов C #, как и ожидалось - вот список возможных типов возврата ( из этого ответа ):

  • Любой объект DTO -> сериализованный в Response ContentType
  • HttpResult, HttpError, CompressedResult (IHttpResult) для настраиваемого ответа HTTP

Следующие типы не преобразуются и записываются непосредственно в поток ответов:

  • строка
  • Поток
  • IStreamWriter
  • byte [] - с типом содержимого application / octet-stream.

Пример поддержки пользовательских HTTP-заголовков можно увидеть в этом примере CORS, где вы можете настроить HTTP-заголовки глобально или для каждой отдельной службы.

Поддержка HTML

Существует несколько вариантов возврата HTML-кода в ServiceStack, который подробно описан здесь .

Включает самые быстрые текстовые и двоичные сериализаторы для .NET

Эластичные и быстро сериализаторы имеют первостепенное значение в API , чтобы обеспечить быстрое время отклика и versionable API , который не нарушает существующие клиентов , которые почему ServiceStack включает быстрые текстовые сериализаторы для .NET с опцией NuGet , чтобы позволить @marcgravell «s Протокол Буферы (самый быстрый двоичный сериализатор .NET).

Текстовые сериализаторы ServiceStack очень устойчивы и могут без ошибок выдерживать экстремальные версии .

Опыт разработки без трения Сквозной

Самоуверенный характер ServiceStack обеспечивает быстрый, типизированный, краткий API-интерфейс веб-службы со встроенной поддержкой клиентов Sync / Async C # /. NET и Async Silverlight без какого-либо кода:

Пример синхронизации C #

var response = client.Send<HelloResponse>(new Hello { Name = "World!" });

Async C # Пример

client.SendAsync<HelloResponse>(new Hello { Name = "World!" },
    r => Console.WriteLine(r.Result), (r, ex) => { throw ex; });

Поскольку он просто возвращает чистый JSON, он также тривиально используется другими HTTP-клиентами, например, пример клиента JS с использованием jQuery :

$.getJSON("http://localhost/Backbone.Todo/todos", function(todos) {
    alert(todos.length == 1);
});

Сильно проверяемый

Все сервисные клиенты C # / .NET имеют одни и те же интерфейсы, что делает их легко тестируемыми и заменяемыми до такой степени, что вы можете иметь один и тот же модульный тест, а также служить интеграционным тестом XML, JSON, JSV, SOAP .

Встроенная расширенная проверка и обработка ошибок

В его задачу по предоставлению беспрепятственного и чистого опыта разработки, ServiceStack также включает встроенную проверку типов и обработку ошибок, при которой исключение C # или использование встроенной проверки Fluent обеспечивает структурированные типизированные ошибки клиентов, легко доступные на клиентах веб-служб. Например:

try {
    var client = new JsonServiceClient(BaseUri);
    var response = client.Send<UserResponse>(new User());
} catch (WebServiceException webEx) {
    /*
      webEx.StatusCode  = 400
      webEx.ErrorCode   = ArgumentNullException
      webEx.Message     = Value cannot be null. Parameter name: Name
      webEx.StackTrace  = (your Server Exception StackTrace - if DebugMode is enabled)
      webEx.ResponseDto = (your populated Response DTO)
      webEx.ResponseStatus   = (your populated Response Status DTO)
      webEx.GetFieldErrors() = (individual errors for each field if any)
    */
}

Чтобы упростить использование ошибок в JavaScript, вы можете использовать легковесную библиотеку JavaScript ss-validation.js, чтобы тривиально связывать ваши ошибки ответа с полями HTML-формы одной строкой кода. Пример проект SocialBootstrapApi обеспечивает хорошую демонстрацию этого.

Богатая интеграция с ASP.NET и MVC

В ServiceStack MVC PowerPack переписывание и исправляет много из АБИСА ASP.NET и MVC с заменой его Калечащей сессией и кэширование XML-обремененными провайдеры ASP.NET с собственной чистой и зависимости свободной реализацией ICacheClient и ISession API.

ServiceStack также включает в себя более новую и более чистую модель поставщика аутентификации и авторизации с несколькими встроенными AuthProviders:

  • Учетные данные - для проверки подлинности с использованием учетных данных имени пользователя / пароля путем отправки в службу / auth / credentials
  • Базовая аутентификация - разрешение пользователям проходить аутентификацию с помощью базовой аутентификации
  • Twitter OAuth - разрешить пользователям регистрироваться и проходить аутентификацию через Twitter
  • Facebook OAuth - разрешить пользователям регистрироваться и проходить аутентификацию через Facebook

Модуль проверки подлинности является полностью необязательным и построен на основе чистых API-интерфейсов ICacheClient / ISession и OrmLite, что позволяет хранить ваши сеансы в памяти, Redis или Memcached, а ваши данные UserAuth сохраняются в поддерживаемых OrmLite СУБД SQLServer, MySql, PostgreSQL, Sqlite as. а также хранилище данных Redis или InMemory (полезно для разработки / тестирования).

Отличная документация

ServiceStack очень хорошо документирован, где большая часть информации о платформе размещена на вики- сайте GitHub . Документацию для других частей платформы (например, Serializer, Redis, OrmLite) можно найти на servicestack.net/docs/

Проект ServiceStack.Examples предоставляет исходный код для всех живых демонстраций ServiceStack и стартовых шаблонов, в то время как проект SocialBoostsrapApi предоставляет отличную отправную точку для разработки одностраничного приложения Backbone.js с ServiceStack и MVC на основе шаблона начальной загрузки Twitters.

В дополнение к вышесказанному в Группе Google содержится огромное количество информации, которая за последние годы значительно расширилась.

Работает везде

ServiceStack - это платформа .NET 3.5, которая работает на хостах ASP.NET и HttpListener и может быть размещена на .NET или Mono (мелочи: www.servicestack.net работает на CentOS / Mono). Это позволяет размещать ваши веб-сервисы ServiceStack на:

Windows с .NET 3.5 и 4.0

Linux / OSX с Mono

  • Apache + mod_mono
  • Nginx + MonoFastCGI
  • XSP
  • Консольное приложение

Разработано с использованием модели разработки Open Source

ServiceStack твердо верит в модель разработки с открытым исходным кодом, где она активно разрабатывается под открытым небом и с самого начала всегда размещалась под либеральной лицензией OSS (New BSD). На сегодняшний день он получил вклад от более чем 47 разработчиков и в настоящее время находится на 3-м месте по популярности среди проектов C # на GitHub .

Недостатки

Я считаю, что самым большим недостатком является то же самое для большинства других проектов OSS .NET, где он не был разработан (или даже указан в качестве доступного варианта) Microsoft. Это означает, что это редко когда-либо первый выбор при оценке структуры. Большинство последователей будут оценивать ServiceStack только в качестве крайней меры, когда они либо разочарованы наложенным трением и хрупкостью WCF, либо производительностью предпочитаемого Microsoft Stack.

Обратная связь и ресурсы сообщества

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

Ресурсы сообщества вики - страница хорошее место , чтобы узнать больше о ServiceStack в дикой природе со ссылками на блог сообщения, слепки, Pod презентацию, г и многой другой.

mythz
источник
30
Как человек, который пытался использовать WCF, webapi, а теперь и ServiceStack, придерживайтесь ServiceStack. 1) WCF излишне сложен для большинства. Это старая делима "давайте решать все проблемы". 2) веб-API слишком новый. Ждите финального релиза. Он даже не поддерживает сообщения из нескольких частей. Код находится в состоянии изменения. Я бы не стал запускать на нем коммерческие приложения. Кстати, этот вопрос не должен быть закрыт.
Майкл Сильвер
13
Не могли бы вы отредактировать это для только что выпущенного ASP.NET WebAPI.
Блейк Немийски
26
Пожалуйста, сделайте ваш сайт более удобным для пользователей. Это похоже на отличный инструмент. Но ваш сайт сбивает с толку. Непонятно, что это за проект и что он хочет решить. Напротив, этот ответ фантастический.
Кугель
82
Это действительно не похоже на сравнение с Web API. Это имеет смысл - на момент ответа Web API был совершенно новым. Это больше не так. Мне бы очень хотелось увидеть фактический срыв, и я боюсь, что этот ответ устарел.
Джордж Мауэр
35
Возможно, стоит отметить, что начиная с версии 4.0 ServiceStack переходит на коммерческий / бинарный дистрибутив. Смотрите пост Демиса в Google+ для подробностей.
Ник Джонс
137

Существует новое основное отличие, которое необходимо учитывать - ServiceStack больше не может свободно использоваться с v4. Поскольку на SS Pro есть довольно определенный ответ, я хотел бы выпустить пару для Web API.

Веб-API

Pro's:

  1. Бесплатное использование в вашем проекте (при условии, что у вас есть лицензия VS, разрешающая коммерческое использование)
  2. Необычайно высокий уровень бесплатной поддержки, доступной от Microsoft и во всем Интернете, в том числе здесь, на StackOverflow.com.
  3. Быстро интегрируется с другими технологиями Microsoft, такими как ASP.NET MVC, который чрезвычайно популярен в магазинах Microsoft.
  4. Встроенная поддержка аутентификации RESTful и авторизации в вашем стеке Microsoft

Con's:

  1. Не поддерживает SOAP

Вспомогательные преимущества

(Пожалуйста, не стесняйтесь оставлять комментарии ниже, добавляя, почему Web API имеет преимущества или плюсы / минусы, которые я могу добавить)

PW Kad
источник
84
Не уверен, что не поддерживает SOAP - это
недоумение
11
Тот факт, что MVC и WebAPI сосуществуют, является CON.
Филл
4
ServiceStack v3 по-прежнему бесплатен, а AFAIK всегда будет, я не думаю, что что-либо из упомянутых мифов относится к v4.
Кайл Гобель
14
Вау, "больше не бесплатно" - это преуменьшение. 999 долларов за разработчика для компании с более чем десятью сотрудниками?
Райан Ланди
7
Моя главная причина перехода с Service Stack на Web API заключается в том, что Service Stack v3 больше не поддерживается на iOS (с использованием Xamarin) с новым требованием 64-битной архитектуры. Конечно, обновления находятся в v4, который является платной версией.
SgtRock
21

Я не могу особо сказать о ServiceStack, но Web API имеет много замечательных функций и в настоящее время находится на версии 2.

Некоторые из вещей, которые вы можете сделать с помощью Web API:

  • Сам хост в приложении OWIN (т.е. работает где угодно).
  • Полная поддержка asyncи await.
  • Хорошие шаблоны по умолчанию и множество примеров с открытым исходным кодом.
  • Использовал отличный Json.Net JSON сериализатор.
  • Rest-ish по умолчанию (вам придется делать гипермедиа самостоятельно).
  • и больше...
user3377837
источник
1
Все в этом списке также присутствует в ServiceStack или может рассматриваться как мошенничество. JSON сериализатор ServiceStack, хотя является менее популярным, является гораздо более быстрее , чем Json.NET. Поддержка OWIN вряд ли будет реализована, потому что у @mythz есть сильные мнения относительно этой технологии, которые являются достаточно обоснованными ( см. Его комментарии к этому запросу функции ).
igormutti
3
Глядя на пакет nuget OWIN, который не обновлялся с момента его публикации три года назад, я не вижу смысла во всей этой ажиотаже вокруг поддержки OWIN. Похоже, люди действительно хотят иметь OWIN, потому что Microsoft однажды сказала, что это круто. В противном случае вы, вероятно, никогда не услышите о OWIN вообще. Microsoft с радостью отказалась от нее в пользу своей новой игрушки K. Это смягчает аргумент «Microsoft стоит за этим, так что он будет жить вечно», поскольку у Microsoft есть сильная тенденция убивать проекты, которые они сильно толкали.
Алексей Зимарев
Зачем отвечать, если у вас нет опыта работы с ServiceStack?
Брайан Огден
6

Как клиент ServiceStack, вот профессионал для ServiceStack, наиболее важный для меня.

https://github.com/ServiceStack/Issues/issues/606

Так. Обнаружена ошибка, обнаружена ошибка, исправлена ​​ошибка. Тот же день Исключительная поддержка!

labilbe
источник
3

Это был один год, когда я использую SS, и все это здорово. ORMLite - это чистая магия. Мне удалось переназначить великолепную БД MySQL для интеграции в мобильные приложения. Никаких изменений в базе данных, потому что она используется с бэкэндом php с другими приложениями ...

Mythz - это пример поддержки и объяснения. Это улучшило мои знания о дизайне приложений и простоте обслуживания. Пожалуйста, попробуйте, и вы поймете.

Кроме того, не сравнивайте SS с WebAPI. Этого недостаточно, SS принесет намного больше в ваш набор инструментов. ServiceStack.Text также является отличным Automapper.

Андре Лебланк
источник