Yann Moisan

Scala, Web, Linux…

Introduction à play2-mini

Présentation

Play2-mini est un framework REST très léger, bâti au dessus de play 2, dont la syntaxe s'inspire de Unfiltered.

L'équipe d'Akka recommande son utilisation pour utiliser du HTTP avec Akka.

Comment ça marche

Commençons par regarder le code d'exemple du projet :

object App extends com.typesafe.play.mini.Application {
   def route  =  {
      case GET(Path("/coco")) & QueryString(qs) =>  Action{
          val o = QueryString(qs,"foo").getOrElse("noh")
          Ok(<h1>It works!, query String {o}</h1>).as("text/html")
      }
      case GET(Path("/flowers")) =>  Action{
          Ok(<h1>It works for flowers!</h1>).as("text/html")
      }
    }
}

Pour un débutant en Scala, ce code semble un peu magique.

Il faut commencer par étendre le trait Application, donc implémenter la méthode route, qui doit renvoyer une PartialFunction[RequestHeader, Handler]. Une fonction partielle est une fonction qui n'est définie que pour un sous ensemble des valeurs possibles de ces arguments : dans notre cas, que pour certains headers HTTP.

Regardons maintenant la définition des routes : case GET(Path("/coco")). Ce bout de code utilise le pattern matching et des extractor personnalisés. Pour rappel, case Path(p)… est équivalent à p = Path.unapply(…). Dans notre cas, on chaine les extracteurs, ce qui équivaut à p = Path.unapply(GET.unapply(…)). L'astuce consiste pour le unapply de l'objet GET à renvoyer le même objet que celui passé en paramètre.

play2-mini utilise donc très élégamment plusieurs fonctionnalités du langage et est donc une excellente source d'inspiration pour ses propres développements.

Limites

play2.1 n'est pas encore supporté (play 2.1-RC2 pour le moment).

~ run n'est pas encore supporté, un bug est ouvert.

Références