service stack

16
ServiceStack: web api без проблем Виктор Суздалев @victor_suzdalev Everada Ростов-на-Дону 14.06.2014

Upload: victor-suzdalev

Post on 15-Jun-2015

77 views

Category:

Internet


3 download

DESCRIPTION

Narrow look on ServiceStack web service framework

TRANSCRIPT

Page 1: Service stack

ServiceStack:web api без проблем

Виктор Суздалев@victor_suzdalev

Everada

Ростов-на-Дону14.06.2014

Page 2: Service stack

• ServiceStack – веб-сервис-фреймворк

• Основан на IHttpHandler• Все остальное – свое• Основная цель – высокая

скорость разработки и работы сервисов

Page 3: Service stack
Page 4: Service stack
Page 5: Service stack

Как получить работающий HelloWorld сервис?

1. install-package ServiceStack2. Добавить определение HttpHandler-а в конфиг3. Создать класс AppHost, отвечающий за конфигурацию

приложения и на запуске вызвать new AppHost().Init();4. Добавить в проект тройку классов

1) MyService: Service2) MyRequest : IReturn<MyResponse>3) MyResponse:IHasResponseStatus

5. …6. PROFIT!

Page 6: Service stack

Press F5

Page 7: Service stack
Page 8: Service stack

Что в коробке?

• Фреймворк для обработки запросов (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-расширение…

Page 9: Service stack
Page 10: Service stack

IoC

• Все сервисы разрешают зависимости автоматически

• Регистрация конкретного объекта-зависимости:Container.Register<IMyLovelyInteface,>(MyImpl);

• Регистрация auto-wired зависимости:Container.RegisterAs<IType,Type>();

• XML-less!

Page 11: Service stack

ORMLite

• Набор расширений над DbConnection• Маппинг POCO• Кастомизация маппинга атрибутами• JSV-сериализатор для всего, что не переводится в

типы БД• Коннекторы для основных Sql DB• using (var con = DbFactory.OpenDbConnection())

{var list = con.Select<MyType>(x=>x.Prop>0);

}

Page 12: Service stack

Работа с ESB

• Strongly-typed-клинеты для работы с сообщениями

• Возможность ответа на сообщение в определенную очередь или на http-адрес

• Возможность обработки сообщений из шины и http-сообщений одним кодом

• Configuration-free работа с шиной за счет умолчаний

Page 13: Service stack
Page 14: Service stack

Кэширование• Конфигурирование:

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);});

}}

Page 15: Service stack

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”};

}}

Page 16: Service stack