ServiceStack против ASP.Net Web API - PullRequest
296 голосов
/ 14 марта 2012

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

Ответы [ 5 ]

385 голосов
/ 14 марта 2012

Они имеют очень похожие варианты использования, так как ведущий сопровождающий проекта 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.Что касается примеров между 2, это единственный известный пример, который у меня есть с одной и той же службой, написанной в ServiceStack и WebApi .

Удаленные службы Best Practices

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

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

  • Шаблон DTO (MSDN ) - Описание использования специальных POCO для создания проводного формата ответов ваших веб-сервисов.

  • Шаблон Gateway (MSDN ) для инкапсуляции обмена данными между клиентом и сервером между моделями клиентского шлюза / DTO и уровнями интерфейса обслуживания.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Поддержка HTML

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

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

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

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

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

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

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

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

ServiceStack MVC PowerPack перезаписывает и исправляет многие проблемы ASP.NET и MVC с заменой для его наносящего вред Сеанса и кэширующих провайдеров ASP.NET, обремененных XMLс собственной чистой и независимой реализацией API-интерфейсов ICacheClient и ISession.

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

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

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

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

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

ServiceStack.Examples Проект предоставляетисходный код для всех живых демонстраций ServiceStack и стартовых шаблонов, в то время как проект SocialBoostsrapApi обеспечивает отличную отправную точку для разработки одностраничного приложения Backbone.js с ServiceStack и MVC на основе шаблона Bootstrap 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 (Новая BSD).На сегодняшний день он получил вклад более чем 47 разработчиков и в настоящее время находится на 3-м месте по популярности среди проектов C # на GitHub .

Недостатки

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

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

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

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

137 голосов
/ 03 декабря 2013

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

Веб-API

Pro's:

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

Con:

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

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

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

21 голосов
/ 04 марта 2014

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

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

  • Самостоятельный хост в приложении OWIN (то есть работает где угодно).
  • Полная поддержка async и await.
  • Хорошие шаблоны по умолчанию и множество примеров с открытым исходным кодом.
  • Использовал отличный сериализатор JSON.Net JSON.
  • Перезапуск по умолчанию (вам придется создавать гипермедиа самостоятельно).
  • и другие ...
5 голосов
/ 29 марта 2018

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

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

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

1 голос
/ 04 января 2019

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

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

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

...