2011-10-01 11 views
11

Estoy considerando escribir un servidor REST usando Clojure.Uso de Clojure con un servidor REST basado en anotaciones

Tengo experiencia usando RESTEasy con Java. Utiliza anotaciones para asociar URL, parámetros de plantilla y parámetros de consulta con clases, métodos y parámetros de método de Java. Creo que el servidor REST Jersey también utiliza anotaciones (ya que también está basado en JAX-RS).

¿Es posible usar estos marcos con Clojure? ¿Hay alguna forma oficial de asociar anotaciones con funciones?

Respuesta

9

Encontré la respuesta en el próximo libro "Programación Clojure", por Chas Emerick, Brian Carper y Christophe Grand.

Si se define un nuevo tipo de deftype, se puede añadir anotaciones de la clase recién creada:

(ns my.resources 
    (:import (javax.ws.rs Path PathParam Produces GET))) 

(definterface PersonService 
    (getPerson [^Integer id])) 

(deftype ^{Path "/people/{id}"} PersonResource [] 
    PersonService 
    (^{GET true             
    Produces ["text/plain"]} 
    getPerson 
    [this ^{PathParam "id"} id]   
    ; blah blah blah  
)) 

No estoy seguro de si esto va a funcionar con gen-class. Tendré que experimentar.

+0

esto es exagerado. Haría eso con compojure – jorgeu

+4

No si ya tiene un gran proyecto existente que utiliza un marco web basado en anotaciones y necesita convencer a sus compañeros de trabajo de que Clojure es una buena opción. – Ralph

Cuestiones relacionadas