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.