可以在CF10中使用REST而不是URL Rewrite吗?

时间:2012-03-28 19:20:29

标签: rest coldfusion coldfusion-10

是否可以使用CF10中的REST支持替换URL重写/ ModRewrite用于SEO友好的URL?编写一个定义GET和POST方法的薄层,并在正确的页面中编写<cfinclude>

或者它会对服务器征税太多,最好留给网络服务器来处理?

一旦进入CFML,版本控制和维护就会容易得多。

由于

3 个答案:

答案 0 :(得分:2)

如果我理解你在说什么(也许我不知道)你会创建一个拦截请求的解析器​​,解析变量,然后通过REST请求适当的页面?如果这就是你的想法那么我不确定我会遵循你会得到什么。 REST(通常)更像是用于获取方法的通用HTTP API - 而不是页面/内容范例(我认为它可能是这样)。

如果您正在寻找的是使用CF作为重写SEO URL处理程序,您现在可以执行此操作。要使用IIS示例,您可以创建一个“自定义404”处理程序 - 一个CFM页面 - 它可以获取与特定文档无关的所有请求。处理程序通过解析URL来梳理变量,然后“包含”正确的cfm代码或页面。这听起来有点像你想要的 - 但它并不是真正的REST。

也许您正在考虑进行某种CFHTTP调用,您可以通过从URL构造查询字符串来获取所需的内容。因此,如果有人加载了以下网址:

blah.com/productid/550

您可以编写类似的代码 -

<cfhttp 
url="http://blah.com/index.cfm?#listfirst(cgi.script_name,'/')#=#listlast(cgi.script_name,'/')#"/>

<cfoutput>#cfhttp.filecontent#</cfoutput>

虽然这可以解决问题,但最好不要使用cfinclude而不是这种方法。像上面那样的方法实际上会为每个请求生成一个额外的线程 - 一个用于浏览器请求的线程,另一个用于cfhttp请求。

最后,我会礼貌地建议URL Rewrite(在apache或IIS中)更有效,更“传统”,因此可能是更好的选择。

答案 1 :(得分:1)

@Henry REST不能替代URL重写。

首先,REST URL具有格式。

http://localhost:8500/rest/App_Name/Rest_Path

“休息”部分是强制性的。如果要更改“rest”,可以在web.xml中更改它(更改URL映射)。

App_Name不是必需的。服务器可以具有默认的休息应用程序。对于默认应用程序,您无需指定AppName。要访问其他(非默认)休息应用程序,您应指定AppName。您可以在管理员的Rest Service注册页面中创建应用程序默认值。

Rest_Path标识CFC以及需要在HTTP调用上调用的CFC中的函数。

如果这些URL格式可以接受,则可以将这些格式的URL映射到CFC中的特定功能。当对URL进行HTTP调用时,将调用相应的CFFunction。通过使用REST,您将访问CFC中的功能。不能以这种方式直接访问CFC或CFM。但是在函数中你可以实现你想要的任何东西(比如调用CFC,调用另一个CFM等)。

此回复是否回答了您的问题?

谢谢, 保罗

答案 2 :(得分:1)

即使有人能做到这一点,我也会说这是错误的工具来做错工作。 URL重写是Web服务器的工作,而不是CF服务器,并且Web服务器将比CF更好。 CF的REST接口用于构建API,而不是用于URL重写。

如果一个 希望用CF处理URL重写,那么使用404处理程序或onMissingTemplate()处理程序会更适合这里,不是吗?至少你正在使用一种专门用于工作的工具(如果不是最好的工具)。

对于版本控制...... .htaccess文件只是一个文本文件,就像CFML文件一样。我没有仔细查看IIS的重写模块,但它是否可以不使用文本文件来配置/维护其重写?显然Apache可以,我们使用Helicon的ISAPI重写模块,该模块使用与mod_rewrite兼容的.htaccess文件。

在我看来,您正试图通过使用一种会影响生产性能的方法来简化开发人员的工作。 “让开发人员的生活更轻松”永远不应成为妥协生产环境的理由(显然,IMO)。