MQTT作为REST API的补充

时间:2018-05-21 11:38:38

标签: rest api mqtt

我有一个REST API,它从客户端接收一些信息(让我们说events)。现在我需要从服务器向客户端发送一些信息。我试图添加MQTT作为客户端与服务器通信的另一种方式。与HTTP不同,MQTT允许我同时执行:发送和接收,因此可以为所有现有REST API方法制作MQTT类似物。

  1. 从客户端收到events - HTTP MQTT
  2. 向客户发送commands - MQTT
  3. 我的想法是成为一个"听众"订阅所有" event" MQTT主题并将它们转换为对REST API的HTTP请求(以保持组件分离)。但是有一个问题:这个监听器是一个简单的客户端。它没有任何特殊权限,并且在与REST API交谈时无法获得发布者的凭据以代表他行事。 MQTT甚至不允许订阅者获取发布特定消息的人。

    一种解决方案是仅使用MQTT将信息从服务器发送到客户端,并继续对所有传入请求使用REST API。但这看起来很奇怪:))

    另一种方法是使用代理自定义挂钩,但并非所有代理都支持它,并且它不是MQTT规范的一部分,因此它不太可靠。

    任何想法如何以正确的方式组织它?

1 个答案:

答案 0 :(得分:1)

鉴于大多数(如果不是全部)MQTT代理支持ACL中的通配符主题,您可以在主题中对用户进行编码,然后授予代理访问与所有用户匹配的通配符主题的权限。

e.g。

发布到events/<user>

然后授予代理访问主题events/+

的权限

然后,您可以确保用户ACL确保只有他们可以发布到events/<user>,以确保用户不能相互冒充。