我正在使用Clojure和RESTEasy设计JAX-RS REST服务器。
我理解,与“传统”的命令式语言相比,Lisp系语言编写的应用程序更多地作为“领域特定语言”构建。 应用程序从底层开始设计,逐渐构建出越来越“精细”的函数,直到在“顶层”,应用程序成为对非常高级别函数的一系列函数调用。
我正试图为我的REST服务器做到这一点,从服务URL请求(GET、POST、PUT、DELETE)的资源类开始。
这是我的第一个资源:
这个资源以JSON格式返回服务器构建时间的字符串,当使用GET http方法调用URL“/buildtime”时。
我将编写更多的这些资源类和封闭方法(大多数类将具有多个方法),每个都有一个definterface和deftype。这似乎是宏的完美用法。
我正在征求关于如何将其作为DSL完成的建议。如何考虑DSL?
我理解,与“传统”的命令式语言相比,Lisp系语言编写的应用程序更多地作为“领域特定语言”构建。 应用程序从底层开始设计,逐渐构建出越来越“精细”的函数,直到在“顶层”,应用程序成为对非常高级别函数的一系列函数调用。
我正试图为我的REST服务器做到这一点,从服务URL请求(GET、POST、PUT、DELETE)的资源类开始。
这是我的第一个资源:
(ns com.example.server.resources.buildtime
(:import [javax.ws.rs CookieParam GET Produces Path]
[javax.ws.rs.core Context Cookie NewCookie Response UriInfo]
[org.jboss.resteasy.annotations.providers.jaxb Formatted]))
(definterface BuildTime
(getBuildTime [^javax.ws.rs.core.UriInfo info
^javax.ws.rs.core.Cookie security-cookie]))
(deftype
^{Formatted true}
BuildTimeResource []
BuildTime
(^{GET true
Path "/buildtime"
Produces ["application/json"]}
getBuildTime
[this info security-cookie]
(.. (Response/ok "20111009") build)))
这个资源以JSON格式返回服务器构建时间的字符串,当使用GET http方法调用URL“/buildtime”时。
我将编写更多的这些资源类和封闭方法(大多数类将具有多个方法),每个都有一个definterface和deftype。这似乎是宏的完美用法。
我正在征求关于如何将其作为DSL完成的建议。如何考虑DSL?