2011-10-01 16 views
11

Sto pensando di scrivere un server REST utilizzando Clojure.Utilizzo di Clojure con un server REST basato su annotazione

Ho esperienza nell'uso di RESTEasy con Java. Utilizza annotazioni per associare URL, parametri di modello e parametri di query con classi, metodi e parametri di metodo Java. Credo che anche il server REST Jersey utilizzi annotazioni (poiché anch'esso è basato su JAX-RS).

È possibile utilizzare questi framework con Clojure? Esiste un modo ufficiale per associare annotazioni con funzioni?

risposta

9

Ho trovato la risposta nel prossimo libro "Clojure Programming", di Chas Emerick, Brian Carper e Christophe Grand.

Se si definisce un nuovo tipo con deftype, è possibile aggiungere annotazioni la classe appena creata:

(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  
)) 

Non sono sicuro se questo funzionerà con gen-class. Avrò bisogno di sperimentare.

+0

questo è eccessivo. Lo farei con Compojure – jorgeu

+4

Se non si dispone già di un progetto di grandi dimensioni esistente che utilizza un framework web basato su annotazioni e si ha bisogno di convincere i colleghi che Clojure è una buona idea. – Ralph

Problemi correlati