2011-03-16 39 views
1

我是Zend框架和MVC類型編程的新手(不是PHP),我試圖使用Zend Framework爲我的服務器上的數據提供API訪問。使用Zend_Rest_Controller提供REST 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 \程序\控制器\ VersionController默認文件。 PHP,它可以處理類型爲:http://www.example.com/api/version的URL。我應該創建一個獨立文件,它位於:\ api \ application \ controllers \ GeteventdetailsController.php,它處理類型(b)的請求(並且每種類型的請求都有一個請求)?如果不是,我應該在哪裏放置我的代碼來處理這些多種請求類型?

  2. 我怎樣才能得到參數(b)傳遞給(d)?

  3. 要做(b)到(d)的請求,我需要從服務器的數據庫中獲取信息。我應該在哪裏放置執行實際MySQL查詢的代碼?

+0

+1 - well put !! – 2011-03-16 22:31:49

+0

但是,謝謝! :) – siliconpi 2011-03-18 02:36:39

回答

0

我已經使用的路線很多ZF,但不是休息的實施,已經對文檔撲打起來,在教程中,您鏈接到 - 我會盡我所能來幫助你......

可能值得看看Rest router的文檔(頁面大約1/3) - 它解釋了它會根據請求的方法自動爲您創建路由;所以你的命名格式爲createevent,geteventdetails等不應該被需要。

問題1:

而不是創建該文件

\ API \程序\控制器\ GeteventdetailsController.php

我想創建該文件

\ api \ application \ controllers \ Events Controller.php這樣

這將是一個控制器來處理所有的事件操作,是獲取,發佈,推杆,等你的建議是過於具體的控制器爲GET,PUT等將被處理行動水平。

問題2:

在文檔中描述的路線告訴你,最後一個參數(:ID)將被分配到名爲id控制器的參數。

所以訪問/事件/使用GET將調用indexAction()EventsController.php文件

URL和訪問URL /事件/ 99/使用GET將調用getAction()EventsController.php文件。您可以從控制器訪問此ID這樣

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

OR

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

那麼你應該寫代碼來查詢數據庫中的事件列表或特定ID。這給我們帶來很好的上...

問題3:

而不是把代碼查詢數據庫事件到你應該爲你的數據庫表和行創建模型的控制器。我建議使用ZF中的現有設置Zend_Db_RowZend_Tb_Table來執行此操作。這將確保您的應用程序/網站是MVC。

將代碼放置在控制器內可能會阻礙開發,例如,當您在其他控制器的稍後日期爲事件編寫註冊表單時。創建事件的邏輯將被複​​制,一次在新控制器中,一次在其他控制器中。你最好將這個邏輯集中到一個操縱和查詢事件的模型中。

我希望有幫助!

+0

謝謝!這確實說明了很多事情。對於如何處理一個控制器內的不同請求以處理諸如http://www.example.com/api/geteventdetails/1234和http://www.example.com/api等請求,我仍然有點困惑。/getregistrationdetails/1234 ...我選擇暫時與不同的控制器一起使用,並在必要時進行改造。 – siliconpi 2011-03-18 02:35:56

0

馬特,我想我找到了你的問題的答案。我想我會在這裏發佈,因爲我花了很長時間才找到答案..它是在hataccess上,您設置配置,以便一切都重定向到您的PHP頁面,將處理解析URI等..

Creating a RESTful API and website with PHP