【问题标题】:ColdFusion MVC frameworks & RESTful Service mismatch?ColdFusion MVC 框架和 RESTful 服务不匹配?
【发布时间】:2010-06-02 02:14:25
【问题描述】:

大多数 CF MVC 框架都使用前端控制器模式。通常使用搜索引擎安全 (SES) 插件和 URL 重写来构建友好的 URL。然而,在实现 RESTful 服务时,使用 MVC 框架似乎是在另一层复杂性之上增加了一层复杂性。

如何驯服这头野兽?任何使用 ColdFusion 支持 RESTful 服务的好方法?有没有可以轻松公开 RESTful 服务的 MVC 框架?

谢谢

【问题讨论】:

  • 我已经放弃了。回到 RPC 风格... RESTful 和 CF 不能很好地结合在一起。工作太多,回报太少。

标签: model-view-controller rest coldfusion


【解决方案1】:

ColdBox 长期以来一直支持 RESTful URL。在 3.0 中,您甚至可以拆分传入的 HTTP 动词,以一种很好的解耦方式执行不同的操作。在这里阅读:http://blog.coldbox.org/post.cfm/coldbox-rest-enabled-urls

您甚至可以非常轻松地为您的事件处理程序设置 HTTP 方法安全性:

component{

    this.allowedMethods = {
        LIST = "GET",
        SAVE = "POST,PUT"
    };
}

【讨论】:

  • Henry,在 2.6.4 中你有几样东西,但不如 3.0 完整,例如: - HTTP 动词 SES 动作匹配仅在 3.0 中可用 - SES 正则表达式约束仅在 3.0 中可用 - HTTP 动词安全性仅在 3.0 中 - REST 的处理程序异常处理仅在 3.0 中 - RenderData 到 JSON,WDDX 是 2.6 但本机 XML 是 3.0 - REST 资源缓存在 2.6 和 3 中都可用 - 请求上下文 HTTP 标头和动词检索仅in 3 顺便说一句3.0差不多完成了,只有缓存更新和wirebox更新,其余核心功能齐全。
【解决方案2】:

我一直在使用 Powernap (http://powernap.riaforge.com) 来实现 RESTful Web 服务。它不是 MVC 框架,但我认为它可以与您当前在应用程序中使用的任何框架一起工作。

【讨论】:

【解决方案3】:

我不久前尝试使用 PowerNap,但我觉得它不适合我正在做的事情(在现有应用程序之上构建 API)。我的解决方案是RESTfulCF:它是前端控制器,但没有实现完整的 MVC,因为(正如你所说)这太过分了。

我们目前正在使用 RESTfulCF 为 White Label Dating 的许多(大量使用)内部系统提供动力,它运行得像梦一样,同时允许我们继续独立于 API 层构建应用程序的其余部分,我们用于仅公开我们需要的系统。

【讨论】:

  • 酷,谢谢。很高兴知道 CF 有更多 RESTful 框架
【解决方案4】:

有趣的是你应该问。我是PowerNap 的粉丝,但我认为它可以通过另一种方式做得更好,所以我开始了自己的框架上周。它仍然是一个前端控制器框架,因此所有内容都通过 index.cfm 进行引导(使用 url-rewriting 可以轻松删除),但它是专门为编写 RESTful Web 服务而构建的。它从 PowerNap 以及FW/1 中汲取了很多灵感。

它仍然有点粗糙,但它有效。现在我称之为概念证明;但在我将其称为 1.0 版之前,它并没有很长的路要走。我已经把some information 和the source 放到了github上。

2010 年 8 月 23 日更新:Now officially at 1.0! :)

【讨论】:

    【解决方案5】:

    我按照 Fowler 的 PageController 模式使用 MVC 来实现 REST 服务。每个资源一个控制器,控制器为支持的每个 http 方法实现一个方法。即 GET、PUT、POST、DELETE。

    对我来说效果很好。我的方法与 MVC 的标准解释的唯一不同之处在于我的模型实际上是 UI 内容的模型。它不是域模型。它可能包含来自领域模型的元素,但也可能包含其他内容。

    【讨论】:

    • 您是否在 ColdFusion 中实现了 PageController 模式?或者您使用什么框架来做到这一点?
    • 不,它是我自己的 C# 框架,但 MVC 模式是普遍适用的。
    【解决方案6】:

    快银还不错! http://quicksilver.riaforge.org/

    /**
    * @url /hello/{text}
    * @httpMethod GET
    */
    public String function saySomething(required String text) {
    return "Hello " & arguments.text;
    }
    

    实际网址:

    index.cfm/hello/developer
    

    【讨论】:

      【解决方案7】:

      另一个选项是 Taffy (https://github.com/atuttle/Taffy)。为每个 URI 模板添加一个 CFC,并为要支持的每个 HTTP 方法(GET、PUT、DELETE 等)定义一个方法。

      <cfcomponent extends="taffy.core.resource" output="false"
                   taffy_uri="/user/{userID}/stuff/{stuffID}/property/{propertyID}">
      
          <cffunction name="get" access="public" output="false">
                  ...
          </cffunction>
      
          <cffunction name="post" access="public" output="false">
                  ...
          </cffunction>
      
          <cffunction name="delete" access="public" output="false">
                  ...
          </cffunction>
      </cfcomponent>
      

      【讨论】:

        猜你喜欢
        • 2017-12-29
        • 2012-03-16
        • 2011-12-25
        • 1970-01-01
        • 2020-03-07
        • 2018-01-30
        • 2011-10-01
        • 2017-01-12
        • 1970-01-01
        相关资源
        最近更新 更多