SlideShare a Scribd company logo
1 of 14
Download to read offline
Scalatra           Unfiltered      Завершение




                Scala On Rest

                Павел Залунин


                29 июня 2011 г.




Павел Залунин
Scala On Rest
Scalatra                            Unfiltered                  Завершение




Исходные данные




            Scalatra - http:// github.com/scalatra/scalatra.
            Unfiltered - http:// github.com/n8han/Unfiltered.




Павел Залунин
Scala On Rest
Scalatra                            Unfiltered                          Завершение




Scalatra

      Легковесный веб-фреймворк.
            FilterExample extends ScalatraFilter (ScalatraFilter extends
            javax.servlet.Filter)
            ServletExample extends ScalatraServlet (ScalatraServlet
            extends javax.servlet.http.HttpServlet)
            request - RichRequest(HttpServletRequest), response -
            HttpServletResponse, session - RichSession(HttpSession),
            context - RichServletContext(HttpServletContext)
            get(route: String)(f: => Any)
            Поддерживаемые типы: Array[Byte], NodeSeq, Unit, Any



Павел Залунин
Scala On Rest
Scalatra                          Unfiltered                   Завершение




Scalatra

      Обработка параметров:
            Поддержка именованных параметров:
                       get("/hello/:name")
            Wildcards:
                      get("/say/*/to/*)
                      multiParams("splat") == Seq("hello", "world")

            Regexp:
                      get("""^/f(.*)/b(.*)""".r)
                      multiParams("captures") == Seq("oo", "ar")



Павел Залунин
Scala On Rest
Scalatra                         Unfiltered                   Завершение




Scalatra
      Тестирование (обертки для ScalaTest, Specs2, Specs):

           "events rest protected api" should {
              var user: User = null
              doFirst {
                 val json = compact(render(Map("login" -> "pasha",
                                        "password" -> "54321")))
                 put("/api/user/new", json) {
                    status must ==(200)
                    user = parse(body).extract[User]
                 }
              }



Павел Залунин
Scala On Rest
Scalatra                             Unfiltered               Завершение




Challenge (Scalatra)


      Пример использования для написание RESTful веб-сервиса с
      OAuth аунтефикацией.
            scalaz (scalatraz.scala, rest_api.scala)
            specs (rest_api.scala, utils.scala)
            lift-json
            info.whiter4bbit.oauth - behind
            mongodb (casbah) - behind




Павел Залунин
Scala On Rest
Scalatra                       Unfiltered                   Завершение




Unfiltered
      Тулкит для обработки HTTP запросов. Предоставляет
      несколько бекендов: jetty, netty.
          Обработчики запросов - PartialFunction’s
          PartialFunction[HttpRequest[A], ResponseFunction[B]]

            Использование Pattern Matching для разбора запросов:
            case r @ PUT(Path("/public/user/new"))
            case GET(Path(Seg("events"::"latest"::int(num)::Nil)))
            case GET(Path("/protected/user/info")) & request

            Использование комбинаторов для обработки запроса
            (library/src/main/scala/response.scala):
            Created ~> ResponseString("Record created")
            MethodNotAllowed ~> ResponseString("Must be GET")

Павел Залунин
Scala On Rest
Scalatra                           Unfiltered                         Завершение




Unfiltered
      Использование различных бекендов:
            Jetty/Servlet container - HttpRequest[HttpServletRequest].
            val app: javax.servlet.Filter
                 = unfiltered.filter.Planify {
            ...
            }
            unfiltered.jetty.Http.local(8080).filter(app).run

            Netty - HttpRequest[ReceivedMessage].
            val hello = unfiltered.netty.cycle.Planify {
            ...
            }
            unfiltered.netty.Http(8080).handler(app).run()

Павел Залунин
Scala On Rest
Scalatra                       Unfiltered                         Завершение




Unfiltered
      Для тестирования написаны обертки для Specs и ScalaTest.
      Для отправки запросов используется dispatch-dispatch.
      def addUser(login: String, password: String,
         f: PutResponse) = {
        val credentials = Map("login" -> login,
                               "password" -> password)
        h(host / "public" / "user" / "new"
             <<< compact(render(credentials)) as_str f)
      }
      "create user with valid data" in {
        addUser("pasha", "123", {
           case (code, _, _, _) => code must_==200
        })
      }

Павел Залунин
Scala On Rest
Scalatra                             Unfiltered                     Завершение




Challenge (Unfiltered)


      Написание RESTful веб-сервиса аналогичного, написанному с
      использованием scalatra.
            unfiltered (rest_api.scala)
            unfiltered-oauth (host.scala, stores.scala)
            mongodb (casbah) (stores.scala, protected_api.scala)
            specs (rest_api.scala)




Павел Залунин
Scala On Rest
Scalatra                 Unfiltered               Завершение




Benchmark: ab2 -c 9000 -n 10 (events/latest/1)




Павел Залунин
Scala On Rest
Scalatra                            Unfiltered                           Завершение




На что обратить внимание



            liftweb (http:// liftweb.net) - фреймворк с большим
            количеством модулей (orm, mongodb, json, apmq, facebook
            и т.д.).
            circumflex (http:// cicrkumflex.ru) - scalatra-sinatra-like
            фреймворк.




Павел Залунин
Scala On Rest
Scalatra                           Unfiltered                          Завершение




Ссылки/Примеры использования



            https:// github.com/scalatra/scalatra
            https:// github.com/n8han/Unfiltered
            https:// github.com/n8han/All-Aboard
            https:// github.com/softprops/unfiltered-websockets.g8
            https:// github.com/softprops/unfiltered-oauth-client.g8
            https:// github.com/softprops/unfiltered-oauth-server.g8




Павел Залунин
Scala On Rest
Scalatra        Unfiltered   Завершение




      Все...




Павел Залунин
Scala On Rest

More Related Content

What's hot

Stream API: рекомендации лучших собаководов
Stream API: рекомендации лучших собаководовStream API: рекомендации лучших собаководов
Stream API: рекомендации лучших собаководовtvaleev
 
JPoint 2016 - Bytecode
JPoint 2016 - BytecodeJPoint 2016 - Bytecode
JPoint 2016 - BytecodeAnton Arhipov
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаAnton Arhipov
 
Codefest-2015 Reactive Streams
Codefest-2015 Reactive StreamsCodefest-2015 Reactive Streams
Codefest-2015 Reactive StreamsAlexey Romanchuk
 
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекцииКурс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции7bits
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...rit2011
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человекаNETFest
 
Эффективная отладка репликации MySQL
Эффективная отладка репликации MySQLЭффективная отладка репликации MySQL
Эффективная отладка репликации MySQLSveta Smirnova
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014InterSystems
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​FDConf
 
Service Discovery. More that it seems
Service Discovery. More that it seemsService Discovery. More that it seems
Service Discovery. More that it seemsAleksandr Tarasov
 
How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)Ontico
 
Александр Сычев "Разделяй и властвуй: CQRS в iOS"
Александр Сычев "Разделяй и властвуй: CQRS в iOS"Александр Сычев "Разделяй и властвуй: CQRS в iOS"
Александр Сычев "Разделяй и властвуй: CQRS в iOS"IT Event
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)Noveo
 
RxJava + Retrofit
RxJava + RetrofitRxJava + Retrofit
RxJava + RetrofitDev2Dev
 
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Yulia Tsisyk
 
Артемий Гарин "Выбор лучшего хранилища в Android (cпойлер: Realm)"
Артемий Гарин "Выбор лучшего хранилища в Android (cпойлер: Realm)"Артемий Гарин "Выбор лучшего хранилища в Android (cпойлер: Realm)"
Артемий Гарин "Выбор лучшего хранилища в Android (cпойлер: Realm)"IT Event
 
Технические аспекты знакоства с девушкой в Интернете
Технические аспекты знакоства с девушкой в ИнтернетеТехнические аспекты знакоства с девушкой в Интернете
Технические аспекты знакоства с девушкой в ИнтернетеAlexey Nayden
 

What's hot (20)

Stream API: рекомендации лучших собаководов
Stream API: рекомендации лучших собаководовStream API: рекомендации лучших собаководов
Stream API: рекомендации лучших собаководов
 
JPoint 2016 - Bytecode
JPoint 2016 - BytecodeJPoint 2016 - Bytecode
JPoint 2016 - Bytecode
 
JPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчикаJPoint 2015 - Javassist на службе Java-разработчика
JPoint 2015 - Javassist на службе Java-разработчика
 
Codefest-2015 Reactive Streams
Codefest-2015 Reactive StreamsCodefest-2015 Reactive Streams
Codefest-2015 Reactive Streams
 
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекцииКурс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
 
Эффективная отладка репликации MySQL
Эффективная отладка репликации MySQLЭффективная отладка репликации MySQL
Эффективная отладка репликации MySQL
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
ECP и API управления процессами. InterSystems Meetup Sankt-Peterburg 2014
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​
 
Service Discovery. More that it seems
Service Discovery. More that it seemsService Discovery. More that it seems
Service Discovery. More that it seems
 
How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)
 
Александр Сычев "Разделяй и властвуй: CQRS в iOS"
Александр Сычев "Разделяй и властвуй: CQRS в iOS"Александр Сычев "Разделяй и властвуй: CQRS в iOS"
Александр Сычев "Разделяй и властвуй: CQRS в iOS"
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
RxJava + Retrofit
RxJava + RetrofitRxJava + Retrofit
RxJava + Retrofit
 
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
 
Wider than rails
Wider than railsWider than rails
Wider than rails
 
Артемий Гарин "Выбор лучшего хранилища в Android (cпойлер: Realm)"
Артемий Гарин "Выбор лучшего хранилища в Android (cпойлер: Realm)"Артемий Гарин "Выбор лучшего хранилища в Android (cпойлер: Realm)"
Артемий Гарин "Выбор лучшего хранилища в Android (cпойлер: Realm)"
 
Технические аспекты знакоства с девушкой в Интернете
Технические аспекты знакоства с девушкой в ИнтернетеТехнические аспекты знакоства с девушкой в Интернете
Технические аспекты знакоства с девушкой в Интернете
 

Viewers also liked

Hoddles Creek Pinot
Hoddles Creek PinotHoddles Creek Pinot
Hoddles Creek Pinotjaneread
 
Ayu sari power point 1
Ayu sari power point 1Ayu sari power point 1
Ayu sari power point 1ayusari76
 
Shift innova intro
Shift innova introShift innova intro
Shift innova introSusana Vidal
 
Sales Transformation Kevin Purcell 2011 Sales 2.0 Conference Boston
Sales Transformation Kevin Purcell 2011 Sales 2.0 Conference BostonSales Transformation Kevin Purcell 2011 Sales 2.0 Conference Boston
Sales Transformation Kevin Purcell 2011 Sales 2.0 Conference BostonKevin Purcell
 
Tarefa 4 gloria taboasmartinez
Tarefa 4 gloria taboasmartinezTarefa 4 gloria taboasmartinez
Tarefa 4 gloria taboasmartinezPetisco123
 
2011 06-30-hadoop-summit v5
2011 06-30-hadoop-summit v52011 06-30-hadoop-summit v5
2011 06-30-hadoop-summit v5Samuel Rash
 

Viewers also liked (14)

Century Perimeter Park
Century Perimeter ParkCentury Perimeter Park
Century Perimeter Park
 
Import file-user-guide-my routeonline
Import file-user-guide-my routeonlineImport file-user-guide-my routeonline
Import file-user-guide-my routeonline
 
Navigate smartphone-user-guide-my routeonline
Navigate smartphone-user-guide-my routeonlineNavigate smartphone-user-guide-my routeonline
Navigate smartphone-user-guide-my routeonline
 
FIt For A King
FIt For A KingFIt For A King
FIt For A King
 
Hoddles Creek Pinot
Hoddles Creek PinotHoddles Creek Pinot
Hoddles Creek Pinot
 
Miradas de roda
Miradas de rodaMiradas de roda
Miradas de roda
 
Adventure
AdventureAdventure
Adventure
 
Ayu sari power point 1
Ayu sari power point 1Ayu sari power point 1
Ayu sari power point 1
 
Manual changes-user-guide-MyRouteOnline
Manual changes-user-guide-MyRouteOnlineManual changes-user-guide-MyRouteOnline
Manual changes-user-guide-MyRouteOnline
 
Century Perimeter Park
Century Perimeter ParkCentury Perimeter Park
Century Perimeter Park
 
Shift innova intro
Shift innova introShift innova intro
Shift innova intro
 
Sales Transformation Kevin Purcell 2011 Sales 2.0 Conference Boston
Sales Transformation Kevin Purcell 2011 Sales 2.0 Conference BostonSales Transformation Kevin Purcell 2011 Sales 2.0 Conference Boston
Sales Transformation Kevin Purcell 2011 Sales 2.0 Conference Boston
 
Tarefa 4 gloria taboasmartinez
Tarefa 4 gloria taboasmartinezTarefa 4 gloria taboasmartinez
Tarefa 4 gloria taboasmartinez
 
2011 06-30-hadoop-summit v5
2011 06-30-hadoop-summit v52011 06-30-hadoop-summit v5
2011 06-30-hadoop-summit v5
 

Similar to Scala On Rest

Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptSmartTools
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentAnton Kirillov
 
JavaScript & modern scala backend
JavaScript & modern scala backendJavaScript & modern scala backend
JavaScript & modern scala backendGeeksLab Odessa
 
Javascript in modern scala backend. [russian]
Javascript in modern scala backend.  [russian]  Javascript in modern scala backend.  [russian]
Javascript in modern scala backend. [russian] Ruslan Shevchenko
 
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
 
Работа с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр АлексеевРабота с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр АлексеевAleksander Alekseev
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?phpdevby
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor SysoevMedia Gorod
 
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)Ontico
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Alexey Lesovsky
 
Отладка и устранение проблем в PostgreSQL Streaming Replication / Алексей Лес...
Отладка и устранение проблем в PostgreSQL Streaming Replication / Алексей Лес...Отладка и устранение проблем в PostgreSQL Streaming Replication / Алексей Лес...
Отладка и устранение проблем в PostgreSQL Streaming Replication / Алексей Лес...Ontico
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.Igor Shkulipa
 
Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1Eduard Antsupov
 
Алексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelАлексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelOleg Poludnenko
 

Similar to Scala On Rest (20)

Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
 
Scala for android
Scala for androidScala for android
Scala for android
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application Development
 
JavaScript & modern scala backend
JavaScript & modern scala backendJavaScript & modern scala backend
JavaScript & modern scala backend
 
Javascript in modern scala backend. [russian]
Javascript in modern scala backend.  [russian]  Javascript in modern scala backend.  [russian]
Javascript in modern scala backend. [russian]
 
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
 
Работа с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр АлексеевРабота с Akka Cluster - Александр Алексеев
Работа с Akka Cluster - Александр Алексеев
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
 
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
 
Отладка и устранение проблем в PostgreSQL Streaming Replication / Алексей Лес...
Отладка и устранение проблем в PostgreSQL Streaming Replication / Алексей Лес...Отладка и устранение проблем в PostgreSQL Streaming Replication / Алексей Лес...
Отладка и устранение проблем в PostgreSQL Streaming Replication / Алексей Лес...
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1
 
Алексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать LaravelАлексей Плеханов: 25 причин попробовать Laravel
Алексей Плеханов: 25 причин попробовать Laravel
 

Recently uploaded (9)

Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 

Scala On Rest

  • 1. Scalatra Unfiltered Завершение Scala On Rest Павел Залунин 29 июня 2011 г. Павел Залунин Scala On Rest
  • 2. Scalatra Unfiltered Завершение Исходные данные Scalatra - http:// github.com/scalatra/scalatra. Unfiltered - http:// github.com/n8han/Unfiltered. Павел Залунин Scala On Rest
  • 3. Scalatra Unfiltered Завершение Scalatra Легковесный веб-фреймворк. FilterExample extends ScalatraFilter (ScalatraFilter extends javax.servlet.Filter) ServletExample extends ScalatraServlet (ScalatraServlet extends javax.servlet.http.HttpServlet) request - RichRequest(HttpServletRequest), response - HttpServletResponse, session - RichSession(HttpSession), context - RichServletContext(HttpServletContext) get(route: String)(f: => Any) Поддерживаемые типы: Array[Byte], NodeSeq, Unit, Any Павел Залунин Scala On Rest
  • 4. Scalatra Unfiltered Завершение Scalatra Обработка параметров: Поддержка именованных параметров: get("/hello/:name") Wildcards: get("/say/*/to/*) multiParams("splat") == Seq("hello", "world") Regexp: get("""^/f(.*)/b(.*)""".r) multiParams("captures") == Seq("oo", "ar") Павел Залунин Scala On Rest
  • 5. Scalatra Unfiltered Завершение Scalatra Тестирование (обертки для ScalaTest, Specs2, Specs): "events rest protected api" should { var user: User = null doFirst { val json = compact(render(Map("login" -> "pasha", "password" -> "54321"))) put("/api/user/new", json) { status must ==(200) user = parse(body).extract[User] } } Павел Залунин Scala On Rest
  • 6. Scalatra Unfiltered Завершение Challenge (Scalatra) Пример использования для написание RESTful веб-сервиса с OAuth аунтефикацией. scalaz (scalatraz.scala, rest_api.scala) specs (rest_api.scala, utils.scala) lift-json info.whiter4bbit.oauth - behind mongodb (casbah) - behind Павел Залунин Scala On Rest
  • 7. Scalatra Unfiltered Завершение Unfiltered Тулкит для обработки HTTP запросов. Предоставляет несколько бекендов: jetty, netty. Обработчики запросов - PartialFunction’s PartialFunction[HttpRequest[A], ResponseFunction[B]] Использование Pattern Matching для разбора запросов: case r @ PUT(Path("/public/user/new")) case GET(Path(Seg("events"::"latest"::int(num)::Nil))) case GET(Path("/protected/user/info")) & request Использование комбинаторов для обработки запроса (library/src/main/scala/response.scala): Created ~> ResponseString("Record created") MethodNotAllowed ~> ResponseString("Must be GET") Павел Залунин Scala On Rest
  • 8. Scalatra Unfiltered Завершение Unfiltered Использование различных бекендов: Jetty/Servlet container - HttpRequest[HttpServletRequest]. val app: javax.servlet.Filter = unfiltered.filter.Planify { ... } unfiltered.jetty.Http.local(8080).filter(app).run Netty - HttpRequest[ReceivedMessage]. val hello = unfiltered.netty.cycle.Planify { ... } unfiltered.netty.Http(8080).handler(app).run() Павел Залунин Scala On Rest
  • 9. Scalatra Unfiltered Завершение Unfiltered Для тестирования написаны обертки для Specs и ScalaTest. Для отправки запросов используется dispatch-dispatch. def addUser(login: String, password: String, f: PutResponse) = { val credentials = Map("login" -> login, "password" -> password) h(host / "public" / "user" / "new" <<< compact(render(credentials)) as_str f) } "create user with valid data" in { addUser("pasha", "123", { case (code, _, _, _) => code must_==200 }) } Павел Залунин Scala On Rest
  • 10. Scalatra Unfiltered Завершение Challenge (Unfiltered) Написание RESTful веб-сервиса аналогичного, написанному с использованием scalatra. unfiltered (rest_api.scala) unfiltered-oauth (host.scala, stores.scala) mongodb (casbah) (stores.scala, protected_api.scala) specs (rest_api.scala) Павел Залунин Scala On Rest
  • 11. Scalatra Unfiltered Завершение Benchmark: ab2 -c 9000 -n 10 (events/latest/1) Павел Залунин Scala On Rest
  • 12. Scalatra Unfiltered Завершение На что обратить внимание liftweb (http:// liftweb.net) - фреймворк с большим количеством модулей (orm, mongodb, json, apmq, facebook и т.д.). circumflex (http:// cicrkumflex.ru) - scalatra-sinatra-like фреймворк. Павел Залунин Scala On Rest
  • 13. Scalatra Unfiltered Завершение Ссылки/Примеры использования https:// github.com/scalatra/scalatra https:// github.com/n8han/Unfiltered https:// github.com/n8han/All-Aboard https:// github.com/softprops/unfiltered-websockets.g8 https:// github.com/softprops/unfiltered-oauth-client.g8 https:// github.com/softprops/unfiltered-oauth-server.g8 Павел Залунин Scala On Rest
  • 14. Scalatra Unfiltered Завершение Все... Павел Залунин Scala On Rest