如何与服务器进行通信?

4
想象一下有人想要查询一个比萨服务器上的比萨列表。这个人只需要做以下操作:
 GET /pizzas
 ;=> ["cheese", "extra cheese", "broccoli"]

使用pedestal-app的数据模型和消息,我不确定如何设计客户端-服务器通信。以下是一些晃荡几分钟后的可能性:
  1. 效果消费者
    • 将消息转换为HTTP请求
    • 将结果转换回消息(例如[{:type :add :topic [:pizzas] :value "cheese"} ...]
    • 将消息放入队列中
  2. 服务器上的专用资源 (例如 "/edn")
    • 接受 pedestal 消息
    • 分派到正确的函数
    • 以原始数据响应(即 ["cheese", "extra cheese", "broccoli"])
    • 使效果消费者将结果转换回消息
  3. 使用路由的专用资源。与 #2 类似,但是
    • 更改请求
    • 将其转发到路由表中的另一个条目
  4. 双方消息,其中
    • 服务器将消息转换为函数调用
    • 服务器将结果转换回消息
    • 客户端只需将这些消息添加到队列中
在我看来,使用方法 #2 和 #4,我会绕过并失去所有拦截器的好处。使用方法 #2,我需要重新编写路由逻辑。使用方法 #4,我还需要生成大量代码来适应 pedestal 客户端。
选项 #1 和 #3 看起来更好,但 #3 有些 hacky,而 #1 则是误导性的。
你们是如何做到的呢?
谢谢!
1个回答

0

我对 pedestal 不太了解,我一直在使用 ring/compojure 等。

通过使用 ring,你可以轻松地包装东西,使用 ring.middleware.json 并将其放在你的页面周围,然后使用 ring.middleware.json/wrap-json-responsering.middleware.json/wrap-json-params ,入站的json数据将被解析为参数,然后你可以返回json数据如下:

(ring.util.response/response ["cheese", "extra cheese", "broccoli"])

如果您的库不支持这些行为,您可能可以从ring等地方提取相关代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接