sách gpt4 ai đã đi

Lập trình Clojure "DSL"

In lại 作者:行者123 更新时间:2023-12-03 00:31:10 26 4
mua khóa gpt4 Nike

我正在使用 Clojure 和 RESTEasy 设计 JAX-RS REST 服务器.

据我了解,用 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)))

当使用 GET http 方法在 URL“/buildtime”调用时,此资源以字符串形式返回服务器构建时间(包含在 JSON 包中)。

我将编写更多这样的资源类和封闭方法(大多数类将有多个方法),每个类都有一个 definterface 和一个 deftype。这似乎是宏的完美用途。

我正在征求有关如何将其作为 DSL 完成的建议。如何从 DSL 角度进行思考?

1 Câu trả lời

如果我要这样做,我想我会从为 RESTEasy 创建一个环形适配器开始。完成此操作后,Compojure 将知道如何以与 RESTEasy 配合使用的方式处理和响应 http 请求。以下是一些可帮助您入门的信息。

Ring 是一个 clojure 库,它以标准方式表示 http 请求和响应。本标准详细đây .

它的工作原理是从各种库(即 jetty、netty、finagle)接收 http 请求并将其转换为标准表示形式。然后它将请求交给请求处理程序(通常是使用 Compojure 定义的)。然后处理程序返回一个响应(也在上述规范中定义)。这个响应通过ring back翻译成jetty、netty等可以理解的形式。

此转换由环形适配器完成。列出了一些đây ,并且 Ring 附带一个内置码头适配器。也许您可以使用其中之一作为创建 RESTEasy 适配器的模板。完成后,您可以以标准方式使用 compojure。

Ring 和 compojure 是如何创建 DSL 的绝佳示例。与所有优秀的 DSL 一样,它简化了在其问题域(本例中为 HTTP 服务器)中创建解决方案的过程。它们是如何根据 DSL 进行思考的绝佳示例。如果您研究它们,您将能够很好地利用 DSL 进行思考。

关于Clojure "DSL"编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7712179/

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com