ServiceStack vs ASP.Net Web API

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

Ответ 1

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

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

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

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

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

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

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

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

Ниже представлен краткий обзор стилей API-интерфейсов, которые ServiceStack и WCF продвигают. WebApi отличается от WCF тем, что поддерживает дизайн REST-ful API. Что касается примеров между 2, это единственный известный пример, который у меня есть с той же службой, написанной как в ServiceStack, так и в WebApi.

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

ServiceStack уделяет первоочередное внимание простоте, производительности и продвижению лучших практик в Интернете и удаленных сервисах, сосредоточенных вокруг использования шаблонов проектирования удаленного сервиса Martin Fowlers в качестве идиоматического С#:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Строка
  • Поток
  • IStreamWriter
  • byte [] - с типом содержимого приложения/октета-потока.

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

Поддержка HTML

Здесь есть несколько вариантов для возврата HTML в ServiceStack здесь.

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

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

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

Беспроблемный опыт разработчика в конце концов

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

Пример Sync С#

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

Пример Async С#

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);
});

Высоко проверяемый

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

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

В своей миссии по предоставлению безрискового и чистого опыта, ServiceStack также включает типизированную проверку и обработку ошибок, в которой металирование Исключение С# или использование встроенной проверки 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
  • Базовый Auth - разрешение пользователям проходить аутентификацию с помощью базовой аутентификации
  • Twitter OAuth - разрешить пользователям регистрироваться и проверяться с помощью Twitter.
  • Facebook OAuth - разрешить пользователям регистрироваться и проверяться с помощью Facebook.

Модуль аутентификации является полностью необязательным и встроен в чистые API ICacheClient/ISession и OrmLite, которые позволяют сохранять ваши сессии в памяти, Redis или Memcached, а ваша информация UserAuth сохраняется в поддерживаемых OrmLite RDBMS SQL Server, MySql, PostgreSQL, Sqlite, а также хранилище данных Redis или InMemory (полезно для dev/testing).

Большая документация

ServiceStack очень хорошо документирован, где большая часть информации о структуре размещена на GitHub wiki. Документацию для других частей рамки (например, Serializers, 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 с моно

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

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

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

Недостатки

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

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

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

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

Ответ 2

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

Веб-интерфейс

Pro:

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

Con:

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

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

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

Ответ 3

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

Некоторые из вещей, которые вы можете сделать с веб-интерфейсом API:

  • Локальный хост в приложении OWIN (т.е. работает в любом месте).
  • Полная поддержка async и await.
  • Хорошие шаблоны по умолчанию и множество примеров с открытым исходным кодом.
  • Используется отличный сериализатор Json.Net JSON.
  • Rest-ish по умолчанию (вам придется делать гипермедиа самостоятельно).
  • и многое другое...