Sparkjava
Créer un micro-service en deux minutes avec Sparkjava
Sparkjava késako ?
Sparkjava est un framework web utilisable en Java 8 et Kotlin
- inspiré de Sinatra (un framework web Ruby) et qui permet de fabriquer des micro-services en quelques minutes. Nous allons présenter ici la version Java.
Comment ajouter Sparkjava à mon projet ?
Avec Maven : En ajoutant la dépendance spark-core au fichier pom.xml de votre projet.
<dependency>
<groupId>com.sparkjava</groupId>
<artifactId>spark-core</artifactId>
<version>2.6.0</version>
</dependency>
Avec Gradle : En ajoutant la dépendance spark-core au fichier build.gradle de votre projet.
compile "com.sparkjava:spark-core:2.6.0"
Principe de base
Sparkjava est taillé pour l'écriture d'API REST. En conséquence
- il vous propose d'associer de manière déclarative un verbe REST à une URL pour y déclencher une action.
Le principe est simplissime
- tout passe par la classe spark.Spark (cf. design pattern facade):
// Retourne la String **"MON ACTION"** à l'URL **'/mon_url'** // en fonction du verbe REST spécifié : Spark.get("/mon_url"
- (request
- response) -> "MON ACTION"); // GET Spark.post("/mon_url"
- (request
- response) -> "MON ACTION"); // POST Spark.put("/mon_url"
- (request
- response) -> "MON ACTION"); // PUT Spark.delete("/mon_url"
- (request
- response) -> "MON ACTION"); // DELETE Spark.options("/mon_url"
- (request
- response) -> "MON ACTION"); // OPTIONS
Comment associer une action à une URL ?
Il y a trois syntaxes possibles :
- Celle dite "classique".
- Celle utilisant les classes anonymes.
- Celle de Java 8 utilisant les lambdas.
Exemple avec la syntaxe classique
Ce code est le plus volumineux mais il a l'avantage de rendre les contrôleurs réutilisables (cas du même contrôleur pour du GET et du POST) ou encore de définir une hiérarchie d'héritage entre-eux :
import spark.Spark;
import spark.Route;
public class Main {
public static void main(String... args) {
Spark.get("/mon_url"
- new MyController());
}
}
class MyController implements Route {
@Override
public Object handle(Request request
- Response response) throws Exception {
// Le code à exécuter est ici. Vous pouvez retourner une String
// contenant au choix du HTML
- du JSON ou tout autre chose.
return "MON ACTION";
}
}
Exemple avec la syntaxe Java 8
Ce code est très compact et très pratique pour effectuer de petits tests
- cependant les lambdas ainsi définies ne sont pas réutilisables à travers plusieurs URL ou plusieurs verbes REST.
import spark.Spark;
public class Main { public static void main(String... args) { Spark.get("/mon_url"
- (request
- response) -> { // Le code à exécuter est ici. Vous pouvez retourner une String // contenant au choix du HTML
- du JSON ou tout autre chose.
return "MON ACTION";
});
}
}
Exemple avec les classes anonymes
C'est à mon sens le code le moins pratique des trois car il allie la lourdeur de l'écriture classique avec la non réutilisabilité des lamdbas de Java 8.
import spark.Spark;
import spark.Route;
public class Main {
public static void main(String... args) {
Spark.get("/mon_url"
- new Route() {
@Override
public Object handle(Request request
- Response response) throws Exception {
// Le code à exécuter est ici. Vous pouvez retourner une String
// contenant au choix du HTML
- du JSON ou tout autre chose.
return "MON ACTION";
}
});
}
}
Voilà
- comment promis vous en savez assez pour démarrer un micro-service très simple web avec Sparkjava.