service stack
Post on 15-Jun-2015
77 Views
Preview:
DESCRIPTION
TRANSCRIPT
ServiceStack:web api без проблем
Виктор Суздалев@victor_suzdalev
Everada
Ростов-на-Дону14.06.2014
• ServiceStack – веб-сервис-фреймворк
• Основан на IHttpHandler• Все остальное – свое• Основная цель – высокая
скорость разработки и работы сервисов
Как получить работающий HelloWorld сервис?
1. install-package ServiceStack2. Добавить определение HttpHandler-а в конфиг3. Создать класс AppHost, отвечающий за конфигурацию
приложения и на запуске вызвать new AppHost().Init();4. Добавить в проект тройку классов
1) MyService: Service2) MyRequest : IReturn<MyResponse>3) MyResponse:IHasResponseStatus
5. …6. PROFIT!
Press F5
Что в коробке?
• Фреймворк для обработки запросов (xml, json, jsv, csv, SOAP из коробки)
• Очень быстрый JSON-сериализатор• IoC на базе Func• Micro-ORM ORMLite (второй по скорости после Dapper
ORM для .Net)• Strongly-typed клиенты для работы с сервисами и ESB
(Redis Mq и Rabbit Mq)• Кэш-провайдеры (InMemory, Redis, ORMLite,Azure…)• Поддержка Razor и Markdown-Razor• Swagger, профилировщик, логгер запросов,
провайдеры аутентификации, Dump-расширение…
IoC
• Все сервисы разрешают зависимости автоматически
• Регистрация конкретного объекта-зависимости:Container.Register<IMyLovelyInteface,>(MyImpl);
• Регистрация auto-wired зависимости:Container.RegisterAs<IType,Type>();
• XML-less!
ORMLite
• Набор расширений над DbConnection• Маппинг POCO• Кастомизация маппинга атрибутами• JSV-сериализатор для всего, что не переводится в
типы БД• Коннекторы для основных Sql DB• using (var con = DbFactory.OpenDbConnection())
{var list = con.Select<MyType>(x=>x.Prop>0);
}
Работа с ESB
• Strongly-typed-клинеты для работы с сообщениями
• Возможность ответа на сообщение в определенную очередь или на http-адрес
• Возможность обработки сообщений из шины и http-сообщений одним кодом
• Configuration-free работа с шиной за счет умолчаний
Кэширование• Конфигурирование:
container.Register<ICacheClient>(new MemoryCacheClient());
• Использование:
public class OrdersService : Service{ public object Get(CachedOrders request) {
var cacheKey = "unique_key_for_this_request";return base.Request.ToOptimizedResultUsingCache(
base.Cache,cacheKey,()=>{
GetServiceResponse(request);});
}}
Razor и Markdown-Razor• Привязка view к запросу к сервису
[DefaultView(“MyView”)]public class MyService : Service{}
• Сборка view в ответе:public class MyService : Service{ public object Get(MyRequest request) { return new HttpResult(
new ViewModel {RequestData = request}){View = “myView”};
}}
top related