M33KI ? KĂ©zako ?
La 1Ăšre fois oĂč jâai trouvĂ© que Java Ă©tait intĂ©ressant pour faire du Web (remettons les choses Ă leur place, je faisais de lâASP.Net) câest en dĂ©couvrant Play!> Framework 1. Pouvoir faire des apps web autonomes (jâutilisais IIS que je trouvais beaucoup plus sympa que Websphere), comprendre rĂ©ellement le MVC (mon Ă©quipe faisait du STRUTS, et comment dire âŠ), lâAuto-reload !!!, ⊠Jâai mĂȘme commis un tuto gĂ©ant avec mon camarade @loic_d : PlayRules. Bref, un nouveau monde sâoffrait Ă moi :)
⊠jusquâĂ lâarrivĂ©e de Play 2 qui mit Ă genoux mon petit macbook air :(
Je dĂ©cidais donc de parfaire mon Ă©ducation Java par dâautres moyens, je mâamusais donc avec SparkJava : voir lâarticle N3rd.stack:[java] : faites votre propre stack java pour le web ⊠une sacrĂ©e usine, mais qui me valu lâinsigne honneur dâĂȘtre citĂ© par les cast-codeurs (ok, je fais un peu cire-pompes comme ça, mais jâĂ©tais vraiment trĂšs fier). Lorsquâun jour au bistro, @hgomez me parla dâun petit jeune prometteur qui dĂ©veloppait son propre langage : Golo, et que ça allait envoyer du lourd (le petit jeune câest @jponge). Je me dĂ©pĂȘchais alors de contacter @jponge pour devenir Golo Testeur.
Quasiment dĂšs le dĂ©part, jâai essayĂ© de voir comment je pouvais tordre la bĂȘte et lâutiliser pour faire des applis web, et aprĂšs moult essais instructifs (et productifs), ce fut la naissance de M33ki.
Bon alors, câest quoi !?
M33ki est un âmicro-web-frameworkâ en Golo avec comme base toujours mon framework fĂ©tiche SparkJava destinĂ© Ă faire des services REST (mais pas que) et des applications web lĂ©gĂšres qui peuvent mĂȘme tourner sur un RaspberryPI, un ChromeBook âcrootĂ©â, ⊠tout en proposant des services intĂ©ressants (MongoDb, Redis, SSE, CORS, WebSocket, Promises, Actors (ok il faut le dire vite ;)) ⊠M33ki câest aussi un formidable terrain de jeu, ainsi quâun âgrosâ use case pour dĂ©montrer que lâon peut probablement tout faire avec Golo.
Mes inspirations ont Ă©tĂ© clairement : Play 1, mais aussi Node & Express, Ratpack et dâautres qui sont venus se greffer au fur et Ă mesure.
Et ça âmarcheâ comment ?
Alors je vous passe lâinstallation (https://github.com/TypeUnsafe/m33ki# install-m33ki).
Créer un projet M33KI
Dans un terminal, tapez la commande m33ki
et validez :
_____ ________ ________ __ .__
/ \ \_____ \\_____ \| | _|__|
/ \ / \ _(__ < _(__ <| |/ / |
/ Y \/ \/ \ <| |
\____|__ /______ /______ /__|_ \__|
\/ \/ \/ \/
WebApp server Golo powered (c) @k33g_org
OS : mac os x
Application name?>
Saisissez le nom de votre application (poney
) et choisissez le type de projet (1- Golo Skeleton project
) :
Application name?>poney
Creating poney application
1- copy /m33ki/jars to /Users/k33g_org/poney
2- copy /m33ki/libs to /Users/k33g_org/poney
reading configuration file
What kind of application ?
1- Golo Skeleton project
2- Hybrid project (Java + Golo)
number?>1
Remarque : le projet 2 âHybridâ signifie bien que vous pouvez mixer le code Java et le code Golo, M33ki se dĂ©brouillera pour compiler la partie java automatiquement.
Maintenant vous pouvez aller dans le répertoire poney
et lancer votre webapp avec la commande ./go.sh
(ou go.bat
si vous ĂȘtes sous windows) mais attendez un petit peu.
main.golo
Avant de lancer quoique ce soit, ouvrez le fichier poney/main.golo
:
# Explications
listenForChange("")
signifie quâĂ chaque fois que vous ferez une modification, votre projet sera re-dĂ©marrĂ©, M33ki Ă©coute Ă la racine de la Webappstatic("/public")
signifie que vos âassetsâ html, js, ⊠sont dans le rĂ©pertoirepublic
loadRoutes()
charge les routes définies dansapp/routes/routes.golo
Routes
Toujours dans main.golo
, supprimez loadRoutes()
, et nous allons Ă©crire nos 1Ăšres routes dans le fichier principal :
Ajouter lâimport suivant import m33ki.jackson
en en-tĂȘte de fichier, puis dĂ©finissez les 2 routes suivantes :
DĂ©marrez :
cd poney
./go.sh
Maintenant,
- si vous appelez http://localhost:8888/hello vous obtiendrez
{"hello":"world"}
- si vous appelez http://localhost:8888/hello/bob vous obtiendrez
{"hello":"bob"}
câest simple comme bonjour, vous pouvez bien sĂ»r faire des POST
, PUT
, DELETE
(cf. https://github.com/TypeUnsafe/m33ki# rest-example), mais aussi chaĂźner les closures lors de la requĂȘte, ce qui peut ĂȘtre trĂšs pratique par exemple pour gĂ©rer lâauthentification. Essayez ceci (sans arrĂȘter votre Webapp, je vous rappelle que ça redĂ©marre tout seul) :
- si vous appelez http://localhost:8888/try vous obtiendrez un gros Donât even think about this!
- Tentez ensuite un http://localhost:8888/login puis Ă nouveau un http://localhost:8888/try vous obtiendrez un gentil Victory
Conclusion
CâĂ©tait une rapide prĂ©sentation de la âbĂ©bĂȘteâ. Vous voyez Golo permet dâaller assez loin, mais on peut faire beaucoup dâautres choses comme ceci :
Jouer avec Redis :
Jouer avec MongoDb :
Faire du calcul parallĂšle : (lĂ câest encore les balbutiements)
Ou mĂȘme :
Je le rĂ©pĂšte, câest de lâexpĂ©rimentation (pour partie), et si vous passez par DevoxxFr cette annĂ©e, je vais expliquer comment jâai pu coder ce genre de choses (et câest simple) (et reproductible avec dâautres langages de la JVM comme Groovy) : Golo, de la sucrette syntaxique pour vos applications Java.
Last but not least
Il existe un projet âsisterâ de M33ki : Hi qui est un gĂ©nĂ©rateur de code âĂ la Yeomanâ mais en Golo, et qui sait utiliser Bower et Npm. Comme Yeoman, il utilise un systĂšme de plugins et dispose notamment en standard dâun plugin dĂ©diĂ© Ă M33ki : hi.gen.m33kig qui permet de gĂ©nĂ©rer les routes CRUD Golo, les modĂšles MongoDb et une partie du front js/html avec Backbone et React, que je nâai pas encore documentĂ© si ce nâest par ici https://gist.github.com/k33g/9245205 (draft mode).
allez, jâarrĂȘte ;)
Tweet