Le week-end dernier, j'ai décidé d'explorer davantage la manière dont Clojure peut interagir avec l'écosystème Java existant, le défi était simple :
Créez un framework Web simple dans Clojure en utilisant le framework Quarkus comme base.
Locaux :
(defn send-hello-world [] "Hello World") (defn routes [] [{:method "GET" :path "/hello" :handler send-hello-world}])
Quelques définitions :
Il est très facile de démarrer une application dans Quarkus, vous pouvez suivre ce tutoriel, car vous pouvez voir que votre dernière commande sera quarkus create && cd code-with-quarkus après cela, vous pourrez ouvrir le dossier code-with-quarkus avec votre IDE préféré, la commande a créé la structure de base d'une application Quarkus, et vous pouvez l'exécuter avec quarkus dev
Vous devez configurer Quarkus pour inclure les fichiers .clj dans le dossier cible (le dossier contenant votre application compilée), et vous pouvez le faire en ajoutant cette configuration dans pom.xml dans
<resources> <resource> <directory>/</directory> <includes> <include>*.clj</include> </includes> </resource> </resources>
Comme je l'ai mentionné plus tôt, j'ai défini une structure pour déclarer mes routes, au même emplacement du dossier main. Ensuite j'ai créé un dossier nommé quarkus_clj avec un fichier appelé core avec le code ci-dessous :
(ns quarkus-clj.core) (defn send-hello-world [] "Hello World") (defn routes [] [{:method "GET" :path "/hello" :handler send-hello-world}])
C'est ici que la magie opère ??!
Tout d'abord, vous devez installer Clojure dans votre application Quarkus ; vous pouvez le faire en ajoutant une dépendance dans pom.xml
<dependency> <groupId>org.clojure</groupId> <artifactId>clojure</artifactId> <version>1.11.1</version> </dependency>
Maintenant, vous pouvez supprimer le fichier GreetingResource.java et ses tests. Au même endroit, créez un fichier Starting.java
J'écris quelques commentaires expliquant comment ça marche
@ApplicationScoped public class Starting { //Setup app routes public void setupRouter(@Observes Router router) { // Load Clojure core; IFn require = Clojure.var("clojure.core", "require"); // Load quarkus-clj.core namespace require.invoke(Clojure.read("quarkus-clj.core")); // Load the route list function IFn routesFn = Clojure.var("quarkus-clj.core", "route"); // Invoke the function with no parameters PersistentVector routesVector = (PersistentVector) routesFn.invoke(); //For each route in routes vector for (Object route : routesVector) { /**Get the route map, example {:method "GET" :path "/hello" :handler send-hello-world} */ PersistentArrayMap routeMap = (PersistentArrayMap) route; //Get :path value String path = (String) routeMap.valAt(Clojure.read(":path")); //Get :handler function IFn handlerRoute = (IFn) routeMap.valAt(Clojure.read(":handler")); //Get :method value String method = (String) routeMap.valAt(Clojure.read(":method")); //Create a handler to exec handler function Handler<RoutingContext> handlerFn = (RoutingContext context) -> { String result = (String) handlerRoute.invoke(); context.response().end(result); }; //Config the route in quarkus router.route(HttpMethod.valueOf(method), path).handler(handlerFn); } } }
Maintenant, vous pouvez simplement exécuter : quarkus dev ouvre votre route déclarée et voyez le résultat !
C'était un exemple rapide de la façon d'utiliser Clojure dans une application Quarkus pour créer des itinéraires dynamiques. En quelques étapes seulement, nous avons connecté les deux écosystèmes et mis en place un système de routage de base. N'hésitez pas à développer cette base et à explorer d'autres possibilités avec Clojure et Quarkus !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!