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

时间:2020-03-06 14:32:50  来源:igfitidea点击:

在我尝试过的每个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或者SMS路线的外观如何?匹配关键字和参数的正则表达式?

解决方案

我还没看过问题在于请求也绑定到主机,而响应也绑定到请求。

因此,如果我们通过电子邮件收到请求,并且控制器说要渲染视图" aboutus",则需要MVC框架知道如何:

  • 首先获得请求-MVC框架几乎需要成为主机(IIS不会收到有关新电子邮件的通知,因此如何触发电子邮件轮询代码?)
  • 允许灵活的路由匹配-路径/ URL匹配不适用于所有对象,因此需要特定于请求的控制器路由
  • 使用Aboutus电子邮件视图而不是名为" aboutus"的SMS或者HTTP视图
  • 通过电子邮件将响应发送给正确的收件人

一个Web MVC框架不会减少它,我们将需要一个MVC"主机",该主机可以处理通过Web,短信,电子邮件等进行的激活。

我们似乎主要使用Java和/或者Ruby,因此请原谅我这个答案基于Perl :-)。

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

我们可以在网站上实现基于REST的适配器,该适配器将替换模板并根据输入参数进行重定向。

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

此适配器将允许以编程方式调用网站,并使结果具有可解析的格式。

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

  • 代替分配的模板,将调用通用的xml / json模板,该模板仅输出包含所有模板变量的xml

那么我们可以创建Twitter Poller,SMS网关,甚至可以通过Javascript调用它。

Java Servlet规范旨在使Servlet与协议无关,并以协议特定的方式进行扩展HttpServlet是协议特定的Servlet扩展。我一直以为Sun或者其他第三方框架提供商会提出其他协议特定的扩展,例如FtpServlet或者MailServlet,或者在这种情况下为SmsServlet和TwitterServlet。

相反,发生的事情是人们或者完全绕过了Servlet框架,或者就在HTTP之上构建了他们的协议。

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