Model view controller 是否有支持多种请求类型的MVC web框架?

Model view controller 是否有支持多种请求类型的MVC web框架?,model-view-controller,http,twitter,sms,Model View Controller,Http,Twitter,Sms,在我尝试过的每个MVC框架(Rails、Merb、Waves、Spring和Struts)中,请求(和响应)的概念都与请求的HTTP概念联系在一起。也就是说,即使有一个AbstractRequest是一个请求的超类,AbstractRequest也有一些东西,比如头、请求方法(GET、POST等),以及所有其他与HTTP相关的东西 我希望通过SMS、Twitter、电子邮件或任何其他我可以制作适配器的媒体来支持请求-响应循环。是否有一个框架可以很好地做到这一点 我唯一想到的另一个选择是创建一个T

在我尝试过的每个MVC框架(Rails、Merb、Waves、Spring和Struts)中,请求(和响应)的概念都与请求的HTTP概念联系在一起。也就是说,即使有一个AbstractRequest是一个请求的超类,AbstractRequest也有一些东西,比如头、请求方法(GET、POST等),以及所有其他与HTTP相关的东西

我希望通过SMS、Twitter、电子邮件或任何其他我可以制作适配器的媒体来支持请求-响应循环。是否有一个框架可以很好地做到这一点

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

如果有一个好的多请求媒体框架,路由会是什么样子?在Rails中,HTTP路由类似于:

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

推特或短信路线看起来如何?匹配关键字和参数的正则表达式?

我还没有见过。问题是请求也与主机绑定,而响应与请求绑定

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

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

web MVC框架并不能解决这个问题——你需要一个MVC“主机”,它可以通过web、sms、电子邮件等方式处理激活

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

我非常喜欢CatalystMVC框架()。它通过引擎将请求(一般意义上的)的实际映射委托给代码。诚然,所有的引擎类目前都基于HTTP,但我一直在尝试编写一个不基于HTTP的引擎类(或者可能与Twitter之类的东西绑定,但与Twitter使用的HTTP交互分离)。至少,我相信这是可以做到的,即使我还没有开始尝试。

你可以在你的网站上安装一个适配器,它可以根据输入参数替换模板和重定向

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

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

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

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

然后,您可以创建Twitter轮询器、SMS网关,甚至可以通过Javascript调用它

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

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


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

我不介意编写一些轮询线程,将请求添加到MVC的处理队列中,但我见过的大多数框架都没有真正公开该队列(如果它是多线程的话)。任何解决方案都需要插件,因为新类型总是被添加的。在我看来,Catalyst的实例只能绑定到一个引擎。也就是说,您可以使用CGI Catalyst、FCGI Catalyst或Apache Catalyst,但不能使用多种方式为同一实例提供数据。这不一定是个问题-可以使用相同的DB返回。