Веб-API ServiceStack vs ASP.Net [закрито]


299

Я хочу написати новий API стилю REST і переглянув ServiceStack і мені це дуже подобається. Однак я бачив, що Microsoft випустила проект Web API ASP.Net як частину нової бета-версії MVC 4. Хтось подивився на новий проект Web API? Чи можете ви дати якісь плюси / мінуси кожної системи?

Відповіді:


389

У них є дуже подібні випадки використання, оскільки в якості головного обслуговуючого проекту для проекту 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 )
    • Включає Sql профілювання
  • Кінцеві точки 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, Презентації, Списки та багато іншого.


30
Як хтось, хто намагався використовувати WCF, webapi та тепер ServiceStack, дотримуйтесь ServiceStack. 1) WCF є надмірно складним для більшості. Це стара «деліма» вирішимо всі проблеми. 2) web-api занадто новий. Дочекайтеся остаточного випуску. Він навіть не підтримує повідомлення форм мулі-частини. Код знаходиться в стані потоку. Я б не запускав комерційні програми на ньому. До речі, це питання не слід закривати.
Майкл Сілвер

13
Чи можете ви відредагувати це для щойно випущеного ASP.NET WebAPI.
Блейк Ніємійський

26
Зробіть свій веб-сайт більш зручним для користувачів. Це здається чудовим інструментом. Але ваш сайт заплутаний. Не ясно, що таке проект і що він має на меті вирішити. Навпаки, ця відповідь є фантастичною.
Кугель

82
Це насправді не дуже порівняно з веб-API. Це має сенс - на момент відповіді Web API був абсолютно новим. Це вже не так. Я дуже хотів би побачити фактичну поломку, і я боюся, що ця відповідь застаріла.
Джордж Мауер

35
Можливо, варто зазначити, що ServiceStack переходить до комерційної / бінарної дистрибуції станом на v4.0. Докладніше див. У публікації служби Demis у Google+ .
Нік Джонс

137

Існує нова основна відмінність, яку потрібно врахувати - ServiceStack більше не може користуватися з версії v4. Оскільки у SS pro є досить остаточна відповідь, я хотів викинути пару для Web API

Веб-API

Професійні:

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

Кон:

  1. Не підтримує SOAP

Допоміжні переваги

(Будь ласка, не соромтесь залишати коментарі нижче, додаючи, чому веб-API має переваги чи які плюси / мінуси я можу додати)


84
Не впевнений, що не підтримує SOAP - це конфлікт
D.Rosado

11
Те, що MVC та WebAPI співіснують, є CON.
Філ

4
ServiceStack v3 все ще вільний у використанні, і AFAIK завжди буде, я не думаю, що все, що згадується, є специфічним для v4.
Кайл Гобель

14
Нічого собі, "більше не вільний" - заниження. 999 доларів за розробника для компанії з більш ніж десятьма працівниками?
Райан Лунді

7
Моя найбільша причина переходу з Service Stack на Web API полягає в тому, що Service Stack v3 більше не підтримується на iOS (використовуючи Xamarin) з новою 64-бітовою архітектурною вимогою. Звичайно, оновлення знаходяться у версії 4, яка є платною версією.
SgtRock

21

Я не можу сказати дуже багато про ServiceStack, але Web API має безліч чудових функцій і зараз знаходиться у версії 2.

Деякі речі, які можна зробити за допомогою Web API:

  • Самостійний хост у програмі OWIN (тобто працює де завгодно).
  • Повна підтримка asyncта await.
  • Хороші шаблони за замовчуванням та тонни прикладів з відкритим кодом.
  • Використовується чудовий серіалізатор Json.Net JSON.
  • Відпочинок за замовчуванням (вам доведеться робити гіпермедіа самостійно).
  • і більше...

1
Все в цьому списку також присутнє в ServiceStack або може розглядатися як підступ. JSON серіалізатор ServiceStack, хоча є менш популярним, є набагато більш швидше , ніж Json.NET. Підтримка OWIN навряд чи буде реалізована, оскільки @mythz має чіткі думки щодо цієї технології, які є досить надійними ( див. Його коментарі до цього запиту щодо функцій ).
ygormutti

3
Дивлячись на пакунок нульових пакетів OWIN, який не оновлювався з моменту його опублікування три роки тому, я не бачу сенсу у всьому цьому галасі навколо підтримки OWIN. Схоже, люди дійсно хочуть мати OWIN, оскільки Microsoft якось сказав, що це круто. Інакше ви, мабуть, взагалі ніколи не чули про OWIN. Microsoft із задоволенням кинула це на користь своєї нової іграшки K. Це пом'якшує аргумент "Microsoft стоїть за цим, щоб він жив вічно", оскільки Microsoft має сильну тенденцію вбивати проекти, які їх сильно штовхали.
Олексій Зімарьов

Навіщо відповідати, якщо у вас немає досвіду роботи з ServiceStack?
Брайан Огден


3

Минув рік, коли я використовую SS, і все це чудово. ORMLite - це чиста магія. Мені вдалося переробити чудовий БД MySQL для інтеграції в мобільні додатки. Немає змін у базі даних, тому що це використання із PHP-сервісом із іншими програмами ...

Mythz - приклад щодо підтримки та пояснення. Це покращило мої знання щодо дизайну програм та простоти в обслуговуванні. Спробуйте, і ви зрозумієте.

Крім того, не порівнюйте SS з WebAPI. Це недостатньо, SS приносять набагато більше у вашу панель інструментів. ServiceStack.Text також чудовий Automapper.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.