Model view controller ColdFusion MVC框架&;RESTful服务不匹配?

Model view controller ColdFusion MVC框架&;RESTful服务不匹配?,model-view-controller,rest,coldfusion,Model View Controller,Rest,Coldfusion,大多数CF MVC框架使用前端控制器模式。通常使用搜索引擎安全(SES)插件和URL重写来构建友好的URL。然而,在实现RESTful服务时,使用MVC框架似乎是在另一层复杂性之上增加了一层复杂性 如何驯服这只野兽?使用ColdFusion支持RESTful服务有什么好的、干净的方法吗?是否有任何MVC框架可以轻松公开RESTful服务 谢谢我按照Fowler的模式使用MVC来实现REST服务。每个资源一个控制器,控制器为支持的每个http方法实现一个方法。i、 获取、放置、发布、删除 对我来说

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

如何驯服这只野兽?使用ColdFusion支持RESTful服务有什么好的、干净的方法吗?是否有任何MVC框架可以轻松公开RESTful服务

谢谢

我按照Fowler的模式使用MVC来实现REST服务。每个资源一个控制器,控制器为支持的每个http方法实现一个方法。i、 获取、放置、发布、删除


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

我一直在使用Powernap()实现RESTful web服务。它不是一个MVC框架,但我认为它可以与您当前在应用程序中使用的任何框架协同工作

你应该问的很有趣。我是的粉丝,但我认为可以用另一种方式做得更好一些,所以上周我开始了自己的框架。它仍然是一个前端控制器框架,因此所有内容都通过index.cfm(使用url重写很容易删除)传递,但它是专门为编写RESTful web服务而构建的。它从PowerNap和其他应用程序中获得了很多灵感

这仍然有点粗糙,但它是有效的。现在我称之为概念证明;但我称之为1.0版并不遥远。我在github上安装了和


2010年8月23日更新:!:)

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

我们目前正在使用RESTfulCF在白标日期为许多(大量使用的)内部系统供电,它运行起来就像做梦一样,同时允许我们继续独立于API层构建应用程序的其余部分,我们使用API层只公开我们需要的系统。

Quicksilver还不错

实际网址:

index.cfm/hello/developer

ColdBox长期以来一直支持RESTful URL。在3.0中,您甚至可以拆分传入的HTTP谓词,以一种良好的解耦方式执行不同的操作。请看这里:

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

component{

    this.allowedMethods = {
        LIST = "GET",
        SAVE = "POST,PUT"
    };
}
另一个选择是太妃糖(https://github.com/atuttle/Taffy). 为每个URI模板添加一个CFC,并为您想要支持的每个HTTP方法(GET、PUT、DELETE等)定义一个方法


...
...
...

您是否在ColdFusion中实现了PageController模式?或者你使用了什么框架来实现这一点?不,这是我自己的C#框架,但MVC模式基本上是普遍适用的。我已经放弃了。返回到RPC样式。。。RESTful和CF不太合拍。工作太多回报太少。很酷,谢谢。很高兴知道CFHenry有更多的RESTful框架,在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头和动词检索仅在3中-通过3.0几乎完成的方式,只有缓存更新和接线盒更新,核心的其余部分功能已完成。视频教程
component{

    this.allowedMethods = {
        LIST = "GET",
        SAVE = "POST,PUT"
    };
}
<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>