在ColdFusion 8/Windows Server 2003/IIS6上尝试使用taffy RESTful API框架时获得404

在ColdFusion 8/Windows Server 2003/IIS6上尝试使用taffy RESTful API框架时获得404,coldfusion,iis-6,http-status-code-404,windows-server-2003,taffy,Coldfusion,Iis 6,Http Status Code 404,Windows Server 2003,Taffy,我的任务是为基于ColdFusion 8的CMS系统创建一个API。在做了一些研究之后,我认为RESTful API是最好的选择,原因有三: 它使用起来非常简单 相当容易实现 优秀的长期解决方案 鉴于我首先是一名应用程序/系统程序员,高级web开发不是我的强项,因此,我没有重新发明轮子,而是开始寻找一些API框架 我之所以选择它,主要是因为我发现它的设计比PowerNap和FW/1更优雅,但是我在实现它时遇到了一些困难 根据文档,我已将解压缩的“taffy”文件夹放在我们的web根目录中,并在我

我的任务是为基于ColdFusion 8的CMS系统创建一个API。在做了一些研究之后,我认为RESTful API是最好的选择,原因有三:

  • 它使用起来非常简单
  • 相当容易实现
  • 优秀的长期解决方案
  • 鉴于我首先是一名应用程序/系统程序员,高级web开发不是我的强项,因此,我没有重新发明轮子,而是开始寻找一些API框架

    我之所以选择它,主要是因为我发现它的设计比PowerNap和FW/1更优雅,但是我在实现它时遇到了一些困难

    根据文档,我已将解压缩的“taffy”文件夹放在我们的web根目录中,并在我们的开发站点内创建了一个api目录-

    xxx.xxx.xxx.xxx/dev.cms/api_mk3
    
    里面有目录:

    /resources/studentCollection.cfc
    /resources/studentMember.cfc
    /Application.cfc
    /index.cfm
    
    四个文件的内容如下:

    studentCollection.cfc

    <cfscript>
    component extends="taffy.core.resource" taffy:uri="/students" {
        public function get() {
            //query the database for matches, making use of optional parameter "eyeColor" if provided
            //then...
            var someCollectionObject = ArrayNew(1);
            someCollectionObject[1] = "Jason Bristol";
            return representationOf(someCollectionObject).withStatus(200); //collection might be query, array, etc
        }
    }
    </cfscript>
    
    <cfscript>
    component extends="taffy.core.resource" taffy:uri="/students/{personName}" {
        public function get(string personName) {
            //find the requested person, by name
            //then...
            return noData().withStatus(404);//representationOf(personName).withStatus(200); //member might be a structure, ORM entity, etc
        }
    }
    </cfscript>
    
    <cfcomponent extends="taffy.core.api">
    <cfscript>
    
        this.name = 'CMS-API';
    
        variables.framework = {};
        variables.framework.debugKey = "debug";
        variables.framework.reloadKey = "reload";
        variables.framework.reloadPassword = "true";
        variables.framework.representationClass = "taffy.core.genericRepresentation";
        variables.framework.returnExceptionsAsJson = true;
    
        // do your onApplicationStart stuff here
        function applicationStartEvent() {
        }
    
        // do your onRequestStart stuff here
        function requestStartEvent() {
        }
    
        // this function is called after the request has been parsed and all request details are known
        function onTaffyRequest(verb, cfc, requestArguments, mimeExt) {
            // this would be a good place for you to check API key validity and other non-resource-specific validation
            return true;
        }
    
    </cfscript>
    
    我遇到的问题是我是否要导航到

    xxx.xxx.xxx.xxx/dev.cms/api_mk3/index.cfm/students
    
    我要404

    [14:57:02.963] GET http://xxx.xxx.xxx.xxx/dev.cms/api_mk3/index.cfm/students [HTTP/1.1 404 Not Found 56ms]
    
    Request URL:
    http://xxx.xxx.xxx.xxx/dev.cms/api_mk3/index.cfm/students
    
    
    Request Method:
    GET
    
    
    Status Code:
    HTTP/1.1 404 Not Found
    
    
    
    Request Headers
    14:57:02.000
    
    User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
    Host:xxx.xxx.xxx.xxx
    Connection:keep-alive
    Accept-Language:en-US,en;q=0.5
    Accept-Encoding:gzip, deflate
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    
    
    Sent Cookie
    CFTOKEN:85979056CFID:1194857
    
    
    
    Response Headers
    Δ56ms
    
    X-Powered-By:ASP.NETServer:Microsoft-IIS/6.0
    Date:Fri, 17 May 2013 18:57:37 GMT
    Content-Type:text/html; charset=UTF-8
    Connection:close
    
    现在假设我正确理解了所有内容,我应该有一个.json格式的响应“jasonbristol”或类似的内容

    我怀疑IIS6中的MIME类型或URL重写存在问题,但我不知道如何纠正这一问题的具体细节。我一直在推动升级到WindowsServer2008RC2已经有一段时间了,但运气不好

    这是操作员错误还是可以修复

    编辑: 从我所看到的内容来看,CF日志中没有任何内容。以下是IIS日志中的条目:

    2013-05-20 13:56:20 W3SVC4 10.40.204.236 GET /dev.cms/api_mk3/index.cfm/students - 80 - 70.88.47.65 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.31+(KHTML,+like+Gecko)+Chrome/26.0.1410.64+Safari/537.31 404 0 0
    
    这:

    看起来不是有效的url。index.cfm是一个网页,因此在它之后添加目录是没有意义的。如果students是子文件夹,则需要如下内容:

    xxx.xxx.xxx.xxx/dev.cms/api_mk3/students
    

    如果该文件夹中有索引或默认文件,则应显示该文件。否则,您必须在该文件夹中指定一个文件。

    这是tomcat上普通安装的一个已知问题。(如果您使用tomcat?)

    您可以在web.xml文件中添加额外的servlet映射

    <servlet-mapping>
        <servlet-name>CFMLServlet</servlet-name>
        <url-pattern>/api/index.cfm/*</url-pattern>
    </servlet-mapping>
    
    
    CFMLServlet
    /api/index.cfm/*
    

    根据“假设您的API位于,并且您已经使用URI/products和GET方法实现了资源,那么您可以在浏览器中打开URL:并返回数据,使用默认mime类型序列化(除非另有定义,否则为JSON)”据我所知,这种URL格式是如何访问API的。在尝试实现该框架之前,您知道ColdFusion本身是否工作吗?你能在根目录下浏览到CFM页面吗?
    xxx.xxx.xxx.xxx/index.CFM
    ?事实上,我们的CMS系统目前正在运行,ColdFusion 8安装没有出现任何问题。你有没有尝试过通过点击url
    xxx.xxx.xxx/dev.CMS/api_mk3/index.CFM重新初始化Taffy,有趣的是,我还发现点击xxx.xxx.xxx/dev.cms/api_mk3/index.cfm本身会得到一个404,但是该文件实际上是存在的
    
    xxx.xxx.xxx.xxx/dev.cms/api_mk3/students
    
    <servlet-mapping>
        <servlet-name>CFMLServlet</servlet-name>
        <url-pattern>/api/index.cfm/*</url-pattern>
    </servlet-mapping>