У них є дуже подібні випадки використання, оскільки в якості головного обслуговуючого проекту для проекту ServiceStack я добре розумію переваги ServiceStack та багато природних переваг його дизайну на основі повідомлень .
ServiceStack існує з 2008 року як проект, що працює під управлінням OSS, з єдиною метою сприяти правильному проектуванню та впровадженню віддалених служб без тертя.
Простий та елегантний дизайн
Прагнучи до граничної простоти, він побудований навколо простого і елегантного ядра - більшість його функцій природно прив’язані до ваших моделей , а не до контролерів, - що робить MVC, WebApi (як і всі інші веб-сервісні рамки Microsoft, які виробляла 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.
Цей суть - хороший приклад того, що ви отримуєте за допомогою класу 1 C # .cs у ServiceStack :
- Сторінки метаданих для всіх зареєстрованих форматів
- З посиланнями на WSDL, XSD та клієнтські приклади C #
- Перегляд звіту про HTML-звіт
- Один знімок автономної HTML-сторінки (тобто немає зовнішніх змін). Включає вбудовану відповідь веб-служби JSON - дозволяє програмний доступ до знімків даних.
- Вбудований Mini Profiler (порт відмінного MVC Mini Profiler )
- Кінцеві точки JSON / JSONP, XML, JSV, CSV та SOAP
Класи RestServiceBase і ServiceBase призначені для розміщення вашої власної логіки C # для максимального можливого повторного використання, наприклад, її перший DTO дизайн тривіально дозволяє відкладене та проксі-виконання, коли ваша та сама служба C # також може розміщуватися та виконуватися в хості MQ що відбувається, коли ви зареєструєте IMessageService
подібний хост RedisMQ і зателефонуєте до своєї послуги через /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 -> серіалізований до ContentType Response
- HttpResult, HttpError, CompressionResult (IHttpResult) для індивідуального відповіді HTTP
Перелічені нижче типи не перетворюються та записуються безпосередньо в потік відповідей:
- Рядок
- Потік
- IStreamWriter
- байт [] - з типом вмісту програми / oktet-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!" });
Приклад асинхронізації 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 ServiceClients мають однакові інтерфейси, які роблять їх дуже перевіреними та доступними для заміни до того моменту, коли ви можете мати те ж тестовий пристрій, також служать тестом інтеграції 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 / облікові дані
- Basic Auth - Дозвіл користувачів на автентифікацію за допомогою базової автентифікації
- Twitter OAuth - Дозвольте користувачам зареєструватися та пройти автентифікацію за допомогою Twitter
- Facebook OAuth - Дозвольте користувачам зареєструватися та пройти автентифікацію за допомогою Facebook
Модуль аутентифікації є повністю необов'язковим і вбудований у чисті API ICacheClient / ISession та OrmLite, які дозволяють зберігати ваші сеанси у пам'яті, повторному або memcached, а інформація про UserAuth зберігається у підтримуваних RDBMS-послугах, що підтримуються OrmLite SQLServer, MySql, PostgreSQL, Sqlite як а також сховище даних Redis або InMemory (корисно для розробки / тестування).
Велика документація
ServiceStack дуже добре задокументований там, де більша частина інформації про рамки розміщується на вікі GitHub . Документацію для інших частин фреймворку (наприклад, серіалізатори, Redis, OrmLite) можна знайти на servicestack.net/docs/
Проект ServiceStack.Examples надає вихідний код для всіх демонстрацій і шаблонів для початківців, що ввійшли в службу, в той час як проект SocialBoostsrapApi забезпечує прекрасну вихідну точку розробки додатку для одиночної сторінки Backbone.js з ServiceStack та MVC на основі шаблону Twitters Bootstrap.
На додаток до вищезгаданого, у групі 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
- Додаток консолі
Розроблено за допомогою моделі розвитку з відкритим кодом
ServiceStack є твердим шанувальником моделі розвитку з відкритим кодом, де вона активно розробляється на відкритому повітрі і завжди розміщується під ліберальною ліцензією на OSS (New BSD) з моменту створення. На сьогоднішній день він отримав внески більш ніж 47 розробників, і на даний момент він є третім найпопулярнішим проектом C # на GitHub .
Недоліки
Я вважаю, що найбільшим недоліком є той самий для більшості інших проектів OSS .NET, де Microsoft не був розроблений (або навіть перерахований як доступний варіант). Це означає, що рідко коли-небудь є перший вибір при оцінці рамки. Більшість тих, хто приймає, оцінюватиме ServiceStack лише в крайньому випадку, коли вони або розчаровані нав'язаним тертям та крихкістю WCF, або ефективністю переважного Microsoft Stack.
Зворотній зв'язок та ресурси громади
ServiceStack дуже добре сприймає позитивні відгуки, отримані більшістю людей, які оцінили його як видимий з позитивних настроїв у групі розсилки . Станом на цей рік акаунт @ServiceStack twitter відслідковує згадки та відгуки у своїх улюблених .
Сторінка вікі ресурсів спільноти - це гарне місце, щоб дізнатися більше про ServiceStack у дикій природі за допомогою посилань на повідомлення в блогах, Pod Casts, Презентації, Списки та багато іншого.