我有一个REST API,它从客户端接收一些信息(让我们说events
)。现在我需要从服务器向客户端发送一些信息。我试图添加MQTT作为客户端与服务器通信的另一种方式。与HTTP不同,MQTT允许我同时执行:发送和接收,因此可以为所有现有REST API方法制作MQTT类似物。
events
- HTTP , MQTT commands
- MQTT 我的想法是成为一个"听众"订阅所有" event" MQTT主题并将它们转换为对REST API的HTTP请求(以保持组件分离)。但是有一个问题:这个监听器是一个简单的客户端。它没有任何特殊权限,并且在与REST API交谈时无法获得发布者的凭据以代表他行事。 MQTT甚至不允许订阅者获取发布特定消息的人。
一种解决方案是仅使用MQTT将信息从服务器发送到客户端,并继续对所有传入请求使用REST API。但这看起来很奇怪:))
另一种方法是使用代理自定义挂钩,但并非所有代理都支持它,并且它不是MQTT规范的一部分,因此它不太可靠。
任何想法如何以正确的方式组织它?
答案 0 :(得分:1)
鉴于大多数(如果不是全部)MQTT代理支持ACL中的通配符主题,您可以在主题中对用户进行编码,然后授予代理访问与所有用户匹配的通配符主题的权限。
e.g。
发布到events/<user>
然后授予代理访问主题events/+
然后,您可以确保用户ACL确保只有他们可以发布到events/<user>
,以确保用户不能相互冒充。