【问题标题】:Are there any MVC web frameworks that support multiple request types?是否有任何支持多种请求类型的 MVC Web 框架?
【发布时间】:2010-09-12 01:20:32
【问题描述】:

在我尝试过的每个 MVC 框架(Rails、Merb、Waves、Spring 和 Struts)中,请求(和响应)的概念都与 HTTP 的请求概念相关联。也就是说,即使有一个作为 Request 超类的 AbstractRequest,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 路由看起来如何?正则表达式匹配关键字和参数?

【问题讨论】:

    标签: model-view-controller http twitter sms


    【解决方案1】:

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

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

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

    Web MVC 框架无法解决问题 - 您需要一个能够通过 Web、短信、电子邮件等方式处理激活的 MVC“主机”。

    【讨论】:

    • 我不介意编写将请求添加到 MVC 处理队列的小轮询线程,但我见过的大多数框架并没有真正公开该队列(如果它甚至是多线程的)。任何解决方案都需要插件,因为新类型一直在添加。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 在我看来,一个 Catalyst 实例只能绑定到一个引擎。也就是说,您可以拥有 CGI Catalyst 或 FCGI Catalyst 或 Apache Catalyst,但您不能有多种方式来提供同一个实例。不一定是问题 - 可以使用相同的数据库返回。
      【解决方案4】:

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

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

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

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

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

      然后您可以制作您的 Twitter Poller、SMS 网关,甚至可以从 Javascript 调用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-07
        • 2013-02-21
        • 2018-01-30
        相关资源
        最近更新 更多