【问题标题】:Correct code structure when providing REST API access using Zend_Rest_Controller使用 Zend_Rest_Controller 提供 REST API 访问时正确的代码结构
【发布时间】:2011-03-16 11:40:56
【问题描述】:

我是 Zend 框架和 MVC 类型编程的新手(虽然不是 PHP),我正在尝试使用 Zend 框架为我的服务器上的数据提供 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 的默认文件,它可以处理以下类型的 URL:http://www.example.com/api/version。我是否应该创建一个单独的文件,位于:\api\application\controllers\GeteventdetailsController.php 处理类型 (b) 的请求(并且每个类型的请求一个)?如果没有,我应该将代码放在哪里来处理这些多种请求类型?

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

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

【问题讨论】:

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


    【解决方案1】:

    我在 ZF 中使用了很多路由,但没有在 Rest 实现中使用过,我对文档和您链接到的教程进行了猛烈抨击 - 我会尽力帮助您...

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

    问题 1。

    而不是创建文件

    \api\application\controllers\GeteventdetailsController.php

    我会创建文件

    \api\application\controllers\EventsController.php

    这将是一个控制器来处理所有事件操作,例如获取、发布、放置等。您的建议对于控制器来说太具体了,因为获取、放置等将在操作级别处理。

    问题 2。

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

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

    使用 GET 访问 URL /events/99/ 将调用您的 EventsController.php 文件中的 getAction()。您可以像这样从控制器访问此 id

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

    或

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

    然后您应该编写代码来查询数据库以获取事件列表或特定 ID。这让我们很好地...

    问题 3。

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

    将代码放入控制器可能会阻碍以后的开发,例如当您稍后在另一个控制器中为事件编写注册表时。创建事件的逻辑将被复​​制,一次在新控制器中,一次在 Rest 控制器中。你最好把这个逻辑集中到一个模型中来操作和查询事件。

    希望对你有帮助!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 2017-03-23
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2021-10-02
    相关资源
    最近更新 更多