Dans les projets auxquels j'ai participé récemment, j'ai le sentiment que l'adoption de "Spring Boot" (ou "Spring Web") est devenue la norme de facto. Je suis très reconnaissant pour les nombreuses fonctionnalités fournies par "Spring Boot", mais je suis également insatisfait.
Par exemple:
Il m'est arrivé de rencontrer jooby et de l'essayer, et cela m'a impressionné, alors j'aimerais vous le présenter.
C'est un cadre qui se concentre sur l'attribution de chemins aux «fonctions qui se convertissent en réponses».
Le site officiel dit: "C'est un micro-framework évolutif, rapide, orienté module, fait avec Java." Quand on m'a parlé d'un micro-framework, j'ai pensé que c'était "à la mode et enfumé". Quand j'ai essayé de l'utiliser, j'ai pensé que c'était un framework qui «commençait à être compact et facile à développer».
De plus, lorsque j'ai lancé l'application, elle a démarré rapidement et j'ai ressenti le "style microframework". (Le serveur basé sur netty démarre)
import org.jooby.Jooby;
public class App extends Jooby {
{ get("/", () -> "Hey Jooby!"); }
public static void main(final String[] args) {
run(App::new, args);
}
}
Cela seul démarrera le serveur d'application Web. C'est aussi bien que ** kotlin soit également pris en charge ** en standard.
import org.jooby.*
class App : Kooby ({
get("/") { "Hey Jooby!" }
})
fun main(args:Array<String>) { run(::App, *args) }
Dans ce blog, je vais le présenter dans la source de kotlin ci-dessous.
Le get (" / ") {" Hey Jooby! "}
Dans l '"exemple Kotlin" ci-dessus se trouve l'implémentation du routage. Cela signifie que lorsque vous accédez au chemin racine, la chaîne «Hey Jooby!» Est renvoyée. (Intuitif et très facile à comprendre)
get("/hoge") { "hogeres" }
post("/foo/boo") { FooControler.boo() }
Si vous implémentez une telle chose, cela signifie que l'application Web est terminée.
Voici un exemple un peu plus compliqué. (Lorsque "Traitement des demandes et réponses" et "Utilisation du moteur de modèle")
get("/boo/hoge") { req , rsp -> BooControler.hoge(req.param("name") , rsp)
Results.html("freemarker/boo/hoge.html")
}
Je pense que c'est bien de pouvoir implémenter intuitivement des choses faciles et difficiles.
Je présenterai les implémentations susceptibles d'être utilisées en dehors du routage.
Vous pouvez implémenter ce à quoi répondre lorsqu'une exception se produit.
err { req, rsp, err ->
val cause = err.cause
when (cause) {
is MyException1 -> { /*Mise en œuvre de la réponse*/ }
is MyException2 -> { /*Mise en œuvre de la réponse*/ }
else -> Err.DefHandler().handle(req, rsp, err)
}
}
Si vous souhaitez gérer uniquement des exceptions spécifiques, vous pouvez également effectuer les opérations suivantes.
err(MyException1::class.java) { req, rsp, err -> /*réduction*/}
Filter ###
Vous pouvez insérer un filtrage avant et après le traitement de la demande. Cela vous permet de générer des journaux d'accès et d'ajouter des en-têtes HTTP et des cookies de manière uniforme ou conditionnelle.
before("**") { req, rsp -> initLoginfo(req, rsp) }
after("**") { req, rsp, result ->
accessLog(req, rsp, result)
.header("Access-Control-Allow-Origin", appEnv.allowOrigin)
.header("Access-Control-Allow-Credentials", true)
}
jooby est une idée qui étend la fonction en spécifiant le "module" à utiliser. Le support standard est décrit dans [MODULES] mod sur le site officiel.
Définissez la dépendance de Maven et gradle, et avant le routage,
L'utilisation de base est d'implémenter et d'ajouter des fonctions telles que ʻuse (
Voici quelques exemples.
Vous pouvez utiliser le modèle Freemarker en codant comme suit.
use(Ftl("/freemarker"))
Dans l'exemple ci-dessus
Cela signifie que vous irez voir le modèle depuis le répertoire où classpath passe au répertoire freemarker
.
Lorsque vous utilisez réellement le modèle, vous écrirez le code comme suit.
get("/hoge/") {
Results.html("hoge/index.html")
.put("hogeParam", hogeBoo.hoge)
}
Dans l'exemple ci-dessus, dans le fichier modèle freemarker / hoge / index.html
, vous pouvez accéder à l'objet comme la variable $ {hogeParam}
. (Vous pouvez utiliser Freemarker en standard)
Si vous codez comme suit
use(Jackson())
Écrivez simplement du code comme `get (" / myjson ") {MyJsonObject (firstName =" Yamada ", name =" tarou ", age =" 25 ")} ʻet la réponse sera renvoyée sous la forme json, RESTish. Cela facilite la création d'API.
Cependant, si vous souhaitez simplement renvoyer une chaîne, la valeur de retour se comportera comme si elle était placée entre guillemets.
(Par exemple, get (" / alive / chek ") {" I'm alive "}
aura pour résultat que la chaîne de réponse sera"Je suis vivant"
)
Si vous voulez renvoyer une réponse autre que json, je pense qu'il vaut mieux laisser Jackson former json par vous-même au lieu d'utiliser ʻuse (Jackson ()) `.
[Spark Framework] sp est un autre "micro-framework web" populaire. L'idée de mapper un chemin vers une réponse est similaire à jooby.
En termes de simplicité, c'est encore plus facile que jooby. Cependant, jooby semble être plus facile pour une manipulation fine. Aussi, en termes d'extensibilité avec [MODULES] et mod, je pense que jooby sera mieux loti.
Veuillez comparer lequel est le meilleur en fonction de la situation que vous utilisez.
jooby Comment était-ce?
Bonne chance
Recommended Posts