Cómo usar Compojure para construir rutas en aplicaciones web con Clojure

Compojure es una biblioteca popular en Clojure que nos permite definir rutas de manera sencilla y declarativa para aplicaciones web. Es ampliamente utilizada junto con bibliotecas como Ring para manejar solicitudes HTTP.

1. Instalación de Compojure

Para usar Compojure, primero debemos agregar la dependencia a nuestro proyecto. En deps.edn:

{:deps {compojure/compojure {:mvn/version "1.6.2"}}}

Si estás usando Leiningen, agrégalo a project.clj:

:dependencies [[compojure "1.6.2"]]

2. Definición de rutas básicas

Un ejemplo básico de cómo definir rutas con Compojure:

(require '[compojure.core :refer [defroutes GET POST]])
(defroutes app-routes
(GET "/" [] "¡Bienvenido a mi aplicación!")
(POST "/submit" [nombre] (str "Hola, " nombre)))

En este ejemplo:

3. Integración con Ring

Compojure se integra fácilmente con Ring, la biblioteca base para manejar solicitudes y respuestas HTTP en Clojure. Un ejemplo completo:

(require '[ring.adapter.jetty :refer [run-jetty]])
(run-jetty app-routes {:port 3000})

Este código inicia un servidor en el puerto 3000.

4. Manejo de middleware

Compojure permite usar middlewares para agregar funcionalidades a las solicitudes o respuestas. Ejemplo de middleware de logging:

(require '[ring.middleware.params :refer [wrap-params]])
(def app (wrap-params app-routes))

Con esto, todas las rutas ahora aceptan parámetros automáticamente.

5. Ventajas de usar Compojure

Algunas razones por las que Compojure es una excelente opción:

Con Compojure, construir aplicaciones web en Clojure es rápido, eficiente y divertido.