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 презентацию, г и многой другой.


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 имеет преимущества или плюсы / минусы, которые я могу добавить)


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 по умолчанию (вам придется делать гипермедиа самостоятельно).
  • и больше...

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

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


3

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.