Successfully reported this slideshow.

Scala On Rest

2,546 views

Published on

Published in: Technology
  • Be the first to comment

Scala On Rest

  1. 1. Scalatra Unfiltered Завершение Scala On Rest Павел Залунин 29 июня 2011 г.Павел ЗалунинScala On Rest
  2. 2. Scalatra Unfiltered ЗавершениеИсходные данные Scalatra - http:// github.com/scalatra/scalatra. Unfiltered - http:// github.com/n8han/Unfiltered.Павел ЗалунинScala On Rest
  3. 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. 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. 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. 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. 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. 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. 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. 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. 11. Scalatra Unfiltered ЗавершениеBenchmark: ab2 -c 9000 -n 10 (events/latest/1)Павел ЗалунинScala On Rest
  12. 12. Scalatra Unfiltered ЗавершениеНа что обратить внимание liftweb (http:// liftweb.net) - фреймворк с большим количеством модулей (orm, mongodb, json, apmq, facebook и т.д.). circumflex (http:// cicrkumflex.ru) - scalatra-sinatra-like фреймворк.Павел ЗалунинScala On Rest
  13. 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. 14. Scalatra Unfiltered Завершение Все...Павел ЗалунинScala On Rest

×