API组件分离

时间:2013-03-01 00:18:56

标签: php api

我是API编程世界的新手,我现在只是在工作中有一个侧面项目,我在写作时正在学习,所以请耐心等待。

我不确定为多种不同功能实现API的最佳方法。目前我只有一个测试脚本,我运行了一个apache重定向,将/ api下的任何内容重定向到这个脚本,称之为TestAPI.php(所以/ api / anything会重定向)。我将API的路径变量传递给脚本(因此在该示例中,路径将是'任何')。

目前我只是为了一个目的而编写它,根据路径查找一些数据,最终将使用PUT / DELETE等更新和删除等(它的restish不是restFUL)。这一切都很好,所有东西都重定向到这个脚本,但如果我需要2个不同的功能呢?所以我想查找不同的数据集?所以例如现在/ api / data1将转到第一组,而/ api / data2将转到第二组。这是我开始不确定的地方。

我是否只有1个增长和增长的mega脚本,以便/ api / data1和/ api / data2重定向到同一个地方(从而处理404s之类的任何错误)。或者我有/ api / data1和/ api / data2的脚本,每个都有单独的重定向,然后是404s的通用catchall(我总是希望返回JSON / XML而不是HTML的404,所以我至少需要基于Accept标头返回的逻辑。)

作为第三种选择,我是否有某种能够捕获所有内容的前线控制器,然后调用子组件?因此,1个脚本重定向到/ api下的任何内容,如果它是无效路径,则会调用所需的组件或404。这似乎是对我这样做的最佳方式,但我不知道如何。我是否只有该脚本可以调用的站点部分,或者我是否使用从前线控制器到后端API部分的cURL(因为我需要传递POST / PUT数据我假设我必须使用cURL,还有其他方法吗?)。如何在Apache中实现最佳效果?

1 个答案:

答案 0 :(得分: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);
    }
}

然后你的所有脚本都有一个执行方法,它使用$ request来获取$ _GET或$ _POST变量