使用Zend_Rest_Controller提供REST API访问时,正确的代码结构

时间:2011-03-16 11:40:56

标签: php web-services zend-framework zend-rest

我是Zend Frameworks和MVC类型编程的新手(虽然不是PHP),我正在尝试使用Zend Framework为我的服务器上的数据提供API访问。

我正在使用Chris Danielson的文章(http://www.chrisdanielson.com/2009/09/02/creating-a-php-rest-api-using-the-zend-framework/)作为基础。

我希望以下列格式提供对数据的访问:

(a) http://www.example.com/api/createevent      
    Data will be POSTed here, success will return an id, otherwise an 
    error message/code

(b) http://www.example.com/api/geteventdetails/1234     
    GET request will return data

(c) http://www.example.com/api/getregistrationdetails/1234  
    GET request will return data

(d) http://www.example.com/api/getregistrationdetails/1234/567  
    GET request will return data

问题:

  1. 默认文件位于\ api \ application \ controllers \ VersionController.php,可以处理类型为http://www.example.com/api/version的网址。我应该创建位于以下位置的单独文件:\ api \ application \ controllers \ GeteventdetailsController.php,它处理类型(b)的请求(以及每种请求类型的请求)?如果没有,我应该在哪里放置我的代码来处理这些多种请求类型?

  2. 如何获取(b)至(d)中传递的参数?

  3. 要执行请求(b)到(d),我需要从服务器的数据库中获取信息。我应该在哪里放置执行MySQL查询的代码?

2 个答案:

答案 0 :(得分:0)

我在ZF中使用了很多路线,但是没有使用Rest实现,已经查阅了文档和你链接的教程 - 我会尽力帮助你......

可能值得查看Rest router的文档(约为页面的1/3) - 它解释了它会根据请求的方法自动为您创建路径;所以不应该需要 createevent geteventdetails 等的命名格式。

问题1。

而不是创建文件

  

\ API \应用\控制器\ GeteventdetailsController.php

我要创建文件

  

\ API \应用\控制器\ EventsController.php

这将是一个控制器来处理所有事件操作,包括获取,发布,推送等。您的建议对于控制器来说太具体了,因为get,put等将在操作级别处理。

问题2。

文档中描述的路径向您显示最终参数(:id)将分配给名为id的控制器中的参数。

因此,使用 GET 访问网址 / events / 会调用indexAction()文件中的EventsController.php

使用 GET 访问网址 / events / 99 / 将调用getAction()文件中的EventsController.php。您可以像这样

从控制器访问此ID
$id = $this->getRequest()->getParam("id");

OR

$id = $this->getRequest()->id;

然后,您应该编写代码来查询数据库以查找事件列表或特定ID。这让我们很满意......

问题3。

您应该为数据库表和行创建模型,而不是将用于查询事件数据库的代码放入控制器。我建议使用ZF中的现有设置Zend_Db_RowZend_Tb_Table来执行此操作。这将确保您的应用程序/网站是MVC。

将代码置于控制器内部可能会妨碍以后的开发,例如,当您在以后的另一个控制器中为事件编写注册表单时。创建事件的逻辑将被复​​制,一次在新控制器中,一次在Rest控制器中。您最好将此逻辑集中到用于操作和查询事件的模型中。

我希望有所帮助!

答案 1 :(得分:0)

马特,我想我找到了你问题的答案。我想我会在这里发帖,因为我花了很长时间才找到答案。在hataccess上设置配置,以便所有内容都重定向到你的php页面,它将处理解析URI等等。 / p>

Creating a RESTful API and website with PHP