2011-10-01 4 views
11

Rozważam napisanie serwera REST przy użyciu Clojure.Używanie Clojure z serwerem REST opartym na adnotacji

Mam doświadczenie w korzystaniu z RESTEasy z Javą. Używa adnotacji do kojarzenia adresów URL, parametrów szablonu i parametrów zapytania z klasami, metodami i parametrami Java. Uważam, że serwer REST Jersey również korzysta z adnotacji (ponieważ również opiera się na JAX-RS).

Czy można używać tych frameworków z Clojure? Czy istnieje oficjalny sposób powiązania adnotacji z funkcjami?

Odpowiedz

9

Odpowiedź znalazłem w czwartej książce "Clojure Programming", autorstwa Chas Emerick, Briana Carpera i Christophe Grand.

przypadku zdefiniowania nowego typu z deftype, można dodać adnotacje nowo utworzoną klasę:

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

Nie jestem pewien, czy to będzie działać z gen-class. Będę musiał eksperymentować.

+0

to jest przesada. Zrobiłbym to z compojure – jorgeu

+4

Nie, jeśli masz już duży projekt oparty na adnotacji i musisz przekonać współpracowników, że Clojure jest dobrym rozwiązaniem. – Ralph