2013-03-01 48 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