我维护一个使用 Rails 作为 API 的成熟代码库。Rails 应用程序还使用 MQTT(一种实时、非 Web、非 HTTP 协议)做一些事情。
一些用户要求能够通过 MQTT 协议模拟相同的 REST 命令(避免需要进行两次身份验证并拥有两个不同的协议客户端)。
我见过一些项目,例如 Facebook 的 API通过将部分 HTTP 请求放入使用 JSON 的请求中来“模拟”HTTP(例如:在 JSON 有效负载上具有“标头”和“方法”属性)。这正是我想要做的,但完全在 HTTP 上下文之外。它将发生在处理 MQTT 消息的后台工作程序中。
是否可以单独使用 ActionDispatch 和朋友来模拟控制器调度?
我很难找到有关如何ActionDispatch::Request
在 RSpec 之外单独实例化对象的文档。
MyController.dispatch("create",
ActionDispatch::Request.new({"???" => "Can't find any docs on this one."}),
ActionDispatch::Response.new("?"))
# => RuntimeError: Missing rack.input