Clojure

Clojure es un dialecto de Lisp actualizado, robusto con más de 12 años, que se adapta como un guante al desarrollo web. En el Front-End podemos trabajar con ClojureScript y en el Back-End existen decenas de Frameworks que nos simplificarán el trabajo. Tenía la necesidad de crear un rápido servidor web para servir un poco de HTML sin pasar por Apache o Nginx, por lo que he decido compartir un mini tutorial/ejemplo.

Primero crearemos un proyecto nuevo, llamado mi-web, con Leiningen.

lein new mi-web

Entramos dentro para trabajar con su estructura.

cd mi-web

Antes de continuar vamos a configurarlo para que podamos trabajar desde el terminal sin problemas. Editamos el archivo project.clj y añadimos.

:main ^:skip-aot mi-web.core

Ahora vamos a integrar ring, la librería que nos regalará la posibilidad de levantar un servidor web dentro de Clojure. En :dependecies

:dependencies [[org.clojure/clojure "1.10.0"]]

incluimos ring

[ring "1.7.1"]

La configuración quedará aproximadamente con la siguiente estructura.

(defproject mi-web "0.1.0-SNAPSHOT"
  :main ^:skip-aot mi-web.core
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"
            :url "https://www.eclipse.org/legal/epl-2.0/"}
  :dependencies [
    [org.clojure/clojure "1.10.0"]
    [ring "1.7.1"]
  ]
  :repl-options {:init-ns mi-web.core})

Es el momento de escribir, o copiar, un poco de código.

Abre el archivo src/mi_web/core.clj y borra todo el contenido, ¡sí, todo! En su lugar escribe lo siguiente.

(ns mi-web.core)

;; Importamos Ring
(use 'ring.adapter.jetty)

;; Definimos la Request
(defn mi-pagina [req]
  {:status  200
   :headers {"Content-Type" "text/html"}
   :body    "Mi servidor Web en Clojure!"}
)

;; Iniciamos el servidor en el puerto 3000
(defn -main [& args]
  (run-jetty mi-pagina {:port 3000}))

Se terminó. Ejecutamos Leiningen para ver el resultado.

lein run

Abre con tu navegador favorito la ruta http://localhost:3000/, o si eres más geek ejecutar en el terminal curl.

curl http://localhost:3000/

En cualquier caso disfruta, siempre verás…

Mi servidor Web en Clojure!

Has creado un servidor web con uno de los lenguajes más potentes de el ecosistema de la programación funcional. ¿Quieres continuar ampliando las posibilidades?

  • compojure: Gestionar las rutas.
  • selmer: Generar plantillas HTML con una sintáxis muy parecida a Django.

Si conoces más recursos puedes dejar un comentario.