我是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中实现最佳效果?
答案 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变量