2013-03-01 35 views
1

我是新來的API編程世界,目前我只是在工作中有一個側面項目,我在寫作的時候正在學習,所以請耐心等待。API組件分離

我不確定爲多種不同功能實現API的最佳方式。目前我只有我運行的測試腳本和一個將/ api下的任何東西重定向到這個腳本的apache重定向,稱它爲TestAPI.php(so/api /任何東西都會重定向)。我將API的路徑變量傳遞給腳本(所以在這個例子中,路徑就是'任何')。

目前我只是爲了一個目的而編寫它,查找一些基於路徑的數據,並最終將要使用PUT/DELETE等更新和刪除等(它不會restFUL)。當所有事物都重定向到這個腳本的時候,這很好,但如果我需要2個不同的功能呢?所以我想查找一個不同的數據集?因此,例如,現在/ api/data1將轉到第一組,而/ api/data2轉到第二組。這是我開始不確定的地方。

我是否只有一個超級腳本可以增長和增長,以便/ api/data1和/ api/data2重定向到相同的位置(從而可以處理任何錯誤,如404s)。或者,我有/ api/data1和/ api/data2的腳本,每個腳本都有單獨的重定向,然後是404s的通用catchall(我總是希望返回JSON/XML而不是HTML,因此我至少需要基於Accept頭返回的邏輯)。

作爲第三種選擇,我是否有某種捕捉所有東西的前線控制器,然後調用子組件?因此,1腳本被重定向到/ api下的任何東西,然後在需要的組件或404s中調用它,如果它是無效的路徑。這似乎是對我來說最好的方式,但我不知道如何。我是否只有該腳本可以調用的某個網站部分,或者是否使用從前端控制器到後端API部分的cURL(因爲我需要傳遞POST/PUT數據,我假設我必須使用它cURL,有沒有其他方法?)。這在Apache中如何最好地實現?

回答

1

是的,你使用前端控制器。前端控制器可以使用常規像第一件事後/ API處理請求 即

/API/firstprocessor /方法1

/API/firstprocessor /方法2

/API/secondprocessor/method14

你可以看看Zend_Framework的一個實例,或者它可以是簡單的東西

$name = 'Script_' . $this->generateCommandName($request->getPathVariable(1)); 
$this->executeScript($name, $request); 

public function executeScript($class, Request $request) { 
    if (file_exists("scripts/".$class.'.php')) { 

     //include the script 
    require_once "scripts/".$class.'.php'; 

    //execute the script 
    $command = new $class; 
    $command->execute($request); 
    } 
} 

然後所有的腳本只是一個執行使用$請求得到$ _GET或$ _POST變量

+0

好方法,所以前端控制器實際上並沒有通過調用Web服務器的另一個API部分而是執行腳本該節(像使用上面的例子的data1)在它自己的執行過程中? – yoshiwaan 2013-03-01 00:48:32

+0

是的,這是一個非常標準的做法 – Zak 2013-03-01 00:49:17

+0

好吧,這讓我有很多想法。謝謝。 – yoshiwaan 2013-03-01 01:01:54