У них очень похожие сценарии использования. Как ведущий сопровождающий проекта 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 презентацию, г и многой другой.