Я хочу написать новый API стиля REST и посмотреть на ServiceStack и совсем понравиться. Тем не менее, я видел, что Microsoft выпустила проект ASP.Net Web API в рамках новой бета-версии MVC 4. Кто-нибудь посмотрел на новый проект веб-API? Можете ли вы дать какие-либо плюсы и минусы каждой системы?
ServiceStack vs ASP.Net Web 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
- IIS 5/6/7 (использует IHttpHandler)
- VS.NET WebDevServer
- Консольное приложение или графический интерфейс Windows
- Служба Windows
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 по умолчанию (вам придется делать гипермедиа самостоятельно).
- и многое другое...