2011-10-01 26 views
11

Tôi đang cân nhắc việc viết một Máy chủ REST bằng cách sử dụng Clojure.Sử dụng Clojure với một máy chủ REST dựa trên chú thích

Tôi có kinh nghiệm sử dụng RESTEasy bằng Java. Nó sử dụng chú thích để liên kết URL, thông số mẫu và tham số truy vấn với các lớp Java, phương thức và tham số phương pháp. Tôi tin rằng Máy chủ REST Jersey cũng sử dụng chú thích (vì nó cũng dựa trên JAX-RS).

Có thể sử dụng các khung công tác này với Clojure không? Có cách nào chính thức để liên kết chú thích với các chức năng không?

Trả lời

9

Tôi tìm thấy câu trả lời trong cuốn sách sắp tới "Lập trình Clojure" của Chas Emerick, Brian Carper và Christophe Grand.

Nếu bạn định nghĩa một kiểu mới với deftype, bạn có thể thêm chú thích lớp mới được tạo ra:

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

Tôi không chắc chắn nếu điều này sẽ làm việc với gen-class. Tôi sẽ cần phải thử nghiệm.

+0

điều này là quá mức cần thiết. Tôi sẽ làm điều đó với compojure – jorgeu

+4

Không nếu bạn đã có một dự án lớn hiện có sử dụng khung công tác dựa trên chú thích và bạn cần phải thuyết phục các đồng nghiệp rằng Clojure phù hợp. – Ralph

Các vấn đề liên quan