EA2014 Scalatra

From air
Revision as of 23:24, 6 November 2014 by Adji-Ndeye-Ndate.SAMBE (talk | contribs) (Structuration et développement avec Scalatra)
Jump to: navigation, search
A tiny, Sinatra-like web framework

Présentation

  • Enseignants : Georges-Pierre Bonneau, Didier Donsez (EA2014)
  • Sujet : Scalatra
  • Date : 07 Novembre 2014
  • Auteur : Adji Ndeye Ndate SAMBE <sambe@e.ujf-grenoble.fr>
  • Télécharger la présentation : [[]]

Résumé

Mots Clés

Abstract

Key Words

Synthèse

Introduction

Scalatra est un micro-framework HTTP, écrit dans le nouveau langage Scala. Aujourd’hui, on retrouve beaucoup de sites développés avec Scalatra. Il est utilisé par LinkedIn, la BBC, le Guardian, le site de jeux d’IGN, le fournisseur d'identité sociale JanRain, le dictionnaire en ligne Wordnik, et le nouveau site phare du gouvernement britannique. Il est simple, rapide et encore en production.


Le langage Scala

Le langage Scala tire son nom du mot anglais «scalable», qui peut être traduit par «extensible». Conçu à l'École polytechnique fédérale de Lausanne (EPFL) en Suisse, Scala est un langage qui a en effet la faculté de pouvoir être étendu en fonction des besoins des programmeurs. Il est dit multi-paradigme car il intègre deux paradigmes habituellement opposés: les paradigmes de programmation orientée objet et de programmation fonctionnelle, avec un typage statique. L'idée de ce langage est de reléguer tout ce qui n'est pas indispensable au fonctionnement du langage dans des bibliothèques.


Caractéristiques générales de Scalatra

Scalatra est un micro-framework. Un micro-framework est une façon d'organiser le code, avec uniquement des fonctions d'assistance minimale intégrées. Il est extrêmement modulaire, permettant à l’utilisateur de choisir les bibliothèques qu’il veut, et de facilement étendre des fonctionnalités quand nécessaire.

Scalatra utilise le modèle MVC Pattern et est conçu pour être déployé dans les conteneurs de servlets Java standard: Tomcat, JBoss AS et Jetty.

Scalatra intègre également des constructions avancées pour la programmation event-driven, ce qui permet de pousser facilement des informations dans les navigateurs des utilisateurs afin qu'ils voient l'information constamment mis à jour sans avoir à rafraîchir la page.


Pourquoi utiliser Scalatra?

Le développement d'applications mobiles a explosé au cours des quatre dernières années. Dans le même temps, les frameworks de développement single page tels que Backbone.js, ember.js, et angular.js ont rapidement gagné en popularité.

Cela signifie qu'il existe beaucoup de clients qui ont une utilisation intense et lourde des technologies du Web, différents des clients navigateur traditionnels. Scalatra est un ajustement parfait pour ces clients. Il est facile à installer, léger, et rapide qui permet de concevoir et de construire très rapidement des API web de haute performance.

Avec Scalatra, l’utilisateur dispose d’un excellent moyen pour exprimer des actions HTTP, ainsi que de beaucoup de modules optionnels pour les tâches extérieures communes, et un moyen facile de mettre en place des bibliothèques supplémentaires pour accomplir tout ce qu'il entreprend.

Il dispose d'outils spéciaux intégrés pour produire une belle, fonctionnelle et correcte documentation de l'API.


Structuration et développement avec Scalatra

La structure de base de Scalatra est très simple : les vues sont classées dans le dossier de view, et les layouts (qui englobent les vues) dans le dossier layouts. Il est possible pour l’utilisateur de mettre tout le code Scalatra dans le même répertoire pour faciliter la navigation. La structure basique d’un projet se présente comme-suit :

project
|_build.properties      <= specifies what version of sbt to use
|_build.scala           <= dependencies and project config are set in here
|_plugins.sbt           <= sbt plugins can be added here

src
|_ main
|  |_ scala
|  |  |   |_ScalatraBootstrap.scala     <= mount servlets in here
|  |  |_org
|  |      |_ yourdomain
|  |         |_ projectname
|  |            |_ MyScalatraServlet.scala
|  |_ webapp
|     |_ WEB-INF
|        |_ views
|        |  |_ hello-scalate.scaml
|        |_ layouts
|        |  |_ default.scaml
|        |_ web.xml
|_ test
   |_ scala
      |_ org
         |_ yourdomain
            |_ projectname
               |_ MyScalatraServletSpec.scala

Une application Scalatra complète peut être écrit en quelques lignes de codes :

<source lang="scala">

package org.example.app
 
import org.scalatra._
 
class HelloWord extends ScalatraServlet {
 
  get("/hello") {
    "Hello word!"
  }
}
</source>

Tout ce qui doit être fait c’est d'ajouter un petit fichier de configuration, télécharger et exécuter une commande pour obtenir une application Web en cours d'exécution.

Il y a beaucoup plus à apprendre, mais ce code simple permet d'exprimer le fond de Scalatra. On définit une route, qui est une combinaison d'une requête HTTP , et une URL (get) (/hello) qui exécute un bout de code sur le serveur et retourne le résultat (dans ce cas, la chaîne Hello world!).

Le figure ci-dessous détaille le code ligne par ligne :

Scal.jpg

1 - un nom de package différencie les classes que l'on écrit des bibliothèques d'autres personnes

2 - import org.scalatra._ pour accéder au code du framework

3 - On hérite de la classe ScalatraServlet, qui rend la classe accessible via HTTP

4 - on définit une route avec Get ainsi qu'un chemin ("/")

5 - chaque route retourne une action qui à son tour retourne une valeur. Ici, un string.

Première application avec Scalatra

Après avoir procédé à l’installation de Scalatra (<lien>) et de toutes les dépendances, nous allons générer, construire et exécuter le traditionnel exemple HelloWorld.


1ère étape : Générer un nouveau projet

Elle consiste à exécuter la commande suivante dans un terminal :

g8 scalatra/scalatra-sbt

Cela lance la consultation d’un squelette d'application pré-construit pour vous (à partir de Github). Quelques questions concernant votre demande vous seront posées. Il faudra appuyer sur Entrée pour accepter les valeurs par défaut.

$ g8 scalatra/scalatra-sbt
 > organization [com.example]:
 > package [com.example.app]:
 > name [scalatra-sbt-prototype]:
 > servlet_name [MyScalatraServlet]:
 > scala_version [2.9.1]:
 > version [0.1.0-SNAPSHOT

Giter8 récupérera les réponses à ces questions pour les écrire dans le fichier de build.sbt pour votre application. Il est possible de les modifier plus tard dans ce fichier.

Vos réponses seront appliquées aux templates de giter8 et le squelette du projet sera enregistrées dans votre système local.


2ème étape : Télécharger les dépendances et construire l’application

Il faut exécuter la commande suivante :

 cd scalatra-sbt-prototype 

et une fois dans le répertoire de votre nouvelle application saisir

 sbt 

.

Cela va prendre un peu de temps, surtout la première fois. En effet, SBT consulte le fichier build.sbt et télécharge Scala, un compilateur Scala, Scalatra, et un petit ensemble de dépendances de l'application Scalatra. Cette commande déploie un environnement de développement Web complet.

Une fois que SBT a fini de tout télécharger, vous obtiendrez un terminal SBT, qui ressemble à ceci: '>'.

3ème étape : Lancer l’application HelloWorld

On lance l’application Hello World de la façon suivante :

container:start

Cela compile l’application et démarre un serveur web qui tourne sur http://localhost:8080. Quand vous obtiendrez la sortie ci-dessous, cela signifie que l’application a démarré :

[info] Started SelectChannelConnector@0.0.0.0:8080

Il suffit ensuite de se rendre sur le navigateur. La première requête sera lente car l’application l'exécute pour la première fois, mais les prochaines requêtes seront de plus en plus rapide grâce à l’optimisation par la JVM des chemins de code. Il est possible d’observer le code de l’application en ouvrant le fichier scalatra-sbt-prototype/src/main/scala/com/example/app/MyScalatraServlet.scala :

package com.example.app
import org.scalatra._
import scalate.ScalateSupport
class MyScalatraServlet extends ScalatraServlet with ScalateSupport {
 get(“/”) {
 <html>
 <body>
 <h1>Hello, world!</h1>
 Say <a href=“hello-scalate”>hello to Scalate</a>.
 </body>
 </html>
 }
 notFound {
 // remove content type in case it was set through an action
 contentType = null
 // Try to render a ScalateTemplate if no route matched
 findTemplate(requestPath) map { path =>
 contentType = “text/html”
 layoutTemplate(path)
 } orElse serveStaticResource() getOrElse resourceNotFound()
 }
}

Ceci est une application de Scalatra très simple, contenant un unique itinéraire HTTP et un code pour faire face à des erreurs de type 404 Not Found.


4ème étape : Visualiser l’application

Vous avez terminé. Vous pouvez maintenant vous rendre dans votre navigateur, à l'adresse http://localhost:8080.

Appli scalatra.jpg


Exemples d’utilisation

LinkedIna utilisé Scalatra pour alimenter son ancienne API signal. Certaines parties des services de l’API de The Guardian’s sont développées en Scalatra. Le site http://gov.uk a également construit ses systèmes d’API avec Scalatra.