是否有支持多种请求类型的MVC Web框架?

时间:2008-09-22 15:52:01

标签: model-view-controller http twitter sms

在我尝试过的每个MVC框架中(Rails,Merb,Waves,Spring和Struts),请求(和响应)的概念与请求的HTTP概念相关联。也就是说,即使有一个AbstractRequest是Request的超类,AbstractRequest也有标题,请求方法(GET,POST等)以及与HTTP相关的所有其他内容。

我想支持SMS,Twitter,电子邮件或任何其他媒体的请求 - 响应周期,我可以为其制作适配器。是否有一个特别好的框架?

我想到的唯一另一个选择是创建一个Twitter轮询器,它在一个单独的线程中运行并将消息转换为本地HTTP请求,然后将响应发送回来。

如果多个请求媒体的良好框架,那么路由会是什么样的?在Rails中,HTTP路由看起来像:

map.connect 'some/path/with/:parameter_1/:paramter_2', :controller => 'foo', :action => 'bar'

Twitter或短信路线怎么样?用于匹配关键字和参数的正则表达式?

4 个答案:

答案 0 :(得分:1)

我还没见过一个。问题是请求也与主机绑定,响应与请求相关联。

因此,如果您通过电子邮件收到请求,并且控制器说要呈现“aboutus”视图,那么您需要MVC框架知道如何:

  • 首先获取请求 - MVC框架几乎需要成为主机(IIS不会收到有关新电子邮件的通知,因此您的电子邮件轮询代码如何被解雇?)
  • 允许灵活的路由匹配 - 通过路径/网址匹配对所有人都不起作用,因此需要特定于请求的控制器路由
  • 使用aboutus 电子邮件视图,而不是名为“aboutus”的SMS或HTTP视图
  • 通过电子邮件将回复发送给正确的收件人

Web MVC框架不会削减它 - 你需要一个可以通过网络,短信,电子邮件等处理激活的MVC“主机”。

答案 1 :(得分:1)

Java Servlet规范是为Servlet设计的协议中立,并以协议特定的方式扩展 - HttpServlet是特定于协议的Servlet扩展。我一直想象Sun或其他第三方框架提供商会提出其他特定于协议的扩展,如FtpServlet或MailServlet,或者在本例中为SmsServlet和TwitterServlet。

相反,人们要么完全绕过Servlet框架,要么在HTTP之上构建协议。

当然,如果要为所需协议实现特定于协议的扩展,则必须开发整个堆栈 - 请求对象,响应对象,识别会话的机制(例如,使用SMS中的MSISDN)而不是cookie),一个模板和渲染框架(相当于JSP) - 然后在它上面构建一个MVC框架。

答案 2 :(得分:0)

你似乎主要使用Java和/或Ruby,所以请原谅我这个答案是基于Perl的: - )。

我非常喜欢Catalyst MVC框架(http://www.catalystframework.org/)。它通过引擎将请求(通常,一般意义上)的实际映射委托给代码。当然,所有引擎类目前都基于HTTP,但我已经玩弄了尝试编写不基于HTTP的引擎类(或者可能与Twitter类似,但与HTTP交互分离)的想法。 Twitter使用)。至少,即使我还没有尝试过,我也相信它可以做到。

答案 3 :(得分:0)

您可以在您的网站上实施REST-based适配器,它会根据输入参数替换模板和重定向。

所有进入 api .yourhost.com的请求都将由基于REST的适配器处理。

此适配器允许以编程方式调用您的网站,并以可解析的格式显示结果。

实际上这意味着:它用自己的模板引擎替换模板,在这种情况下会发生这种情况:

  • 而不是指定的模板,调用一个通用的xml / json模板,它只输出一个包含所有模板变量的xml

然后你可以制作你的Twitter Poller,短信网关,甚至可以通过Javascript调用它。