4

想象一下,某个人想要查询比萨饼服务器以获取比萨饼列表。这个人只会做

 GET /pizzas
 ;=> ["cheese", "extra cheese", "broccoli"]

使用pedestal-app的数据模型和消息,我不确定如何设计客户端-服务器通信。以下是几分钟的吊床带来的可能性:

  1. 效果 消费者_
    • 将消息转换为 HTTP 请求
    • 将结果转换回(例如[{:type :add :topic [:pizzas] :value "cheese"} ...]
    • 将消息放入队列
  2. 服务器上的专用资源例如“/edn”)
    • 接受基座消息
    • 分派到正确的功能
    • 响应原始数据(["cheese"、"extra cheese"、"broccoli"])
    • 让效果消费者将结果转换回消息
  3. 使用路由的专用资源。就像#2,但是
    • 更改请求
    • 将其转发到路由表中的另一个条目
  4. 双方留言,同
    • 服务器将消息转换为函数调用
    • 服务器将结果转换回消息
    • 客户端只是将这些消息添加到队列中

在我看来,使用方法 #2 和 #4,我会绕过并失去拦截器的所有好处。使用方法#2,我需要加倍路由逻辑。使用方法#4,我还需要生成大量代码来适应基座客户端。

选项#1 和#3 似乎更好,但#3 闻起来很老套,而#1 方向错误。

你们怎么样?

谢谢!

4

1 回答 1

0

我不知道基座,我一直在 ring/compojure/etc 工作。

使用 ring 你可以简单地包装使用和放置页面的东西,ring.middleware.json然后 入站 json 数据将被解析为参数,你可以将 json 返回为:ring.middleware.json/wrap-json-responsering.middleware.json/wrap-json-params

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

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

于 2013-12-06T01:39:40.110 回答