Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

VictorSuzdalev

June 14, 2014
Tweet

More Decks by VictorSuzdalev

Other Decks in Programming

Transcript

  1. • ServiceStack – веб-сервис-фреймворк • Основан на IHttpHandler • Все

    остальное – свое • Основная цель – высокая скорость разработки и работы сервисов
  2. Как получить работающий HelloWorld сервис? 1. install-package ServiceStack 2. Добавить

    определение HttpHandler-а в конфиг 3. Создать класс AppHost, отвечающий за конфигурацию приложения и на запуске вызвать new AppHost().Init(); 4. Добавить в проект тройку классов 1) MyService: Service 2) MyRequest : IReturn<MyResponse> 3) MyResponse:IHasResponseStatus 5. … 6. PROFIT!
  3. Что в коробке? • Фреймворк для обработки запросов (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-расширение…
  4. IoC • Все сервисы разрешают зависимости автоматически • Регистрация конкретного

    объекта-зависимости: Container.Register<IMyLovelyInteface,>(MyImpl); • Регистрация auto-wired зависимости: Container.RegisterAs<IType,Type>(); • XML-less!
  5. ORMLite • Набор расширений над DbConnection • Маппинг POCO •

    Кастомизация маппинга атрибутами • JSV-сериализатор для всего, что не переводится в типы БД • Коннекторы для основных Sql DB • using (var con = DbFactory.OpenDbConnection()) { var list = con.Select<MyType>(x=>x.Prop>0); }
  6. Работа с ESB • Strongly-typed-клинеты для работы с сообщениями •

    Возможность ответа на сообщение в определенную очередь или на http-адрес • Возможность обработки сообщений из шины и http-сообщений одним кодом • Configuration-free работа с шиной за счет умолчаний
  7. Кэширование • Конфигурирование: 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); }); } }
  8. 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”}; } }