Php 原料药成分分离

Php 原料药成分分离,php,api,Php,Api,我是API编程界的新手,目前我只是有一个小项目在工作,我正在边写边学习,所以请容忍我 我不确定为多个不同的函数实现API的最佳方式。目前,我只运行了一个测试脚本和一个apache重定向,该重定向将/api下的任何内容重定向到此脚本,称之为TestAPI.php(因此/api/anything将重定向)。我将API的path变量传递给脚本(因此在该示例中,路径将是“任意”) 目前,我写它只是为了一个目的,根据路径查找一些数据,最终将要使用PUT/delete等更新和删除etc(它是restISH而

我是API编程界的新手,目前我只是有一个小项目在工作,我正在边写边学习,所以请容忍我

我不确定为多个不同的函数实现API的最佳方式。目前,我只运行了一个测试脚本和一个apache重定向,该重定向将/api下的任何内容重定向到此脚本,称之为TestAPI.php(因此/api/anything将重定向)。我将API的path变量传递给脚本(因此在该示例中,路径将是“任意”)

目前,我写它只是为了一个目的,根据路径查找一些数据,最终将要使用PUT/delete等更新和删除etc(它是restISH而不是restFUL)。在所有内容都重定向到此脚本的情况下,这很好,但是如果我需要两个不同的函数呢?所以我想查找不同的数据集?例如,现在/api/data1将转到第一个集合,/api/data2将转到第二个集合。这就是我开始不确定的地方

我是否只是有一个不断增长的巨型脚本,以便/api/data1和/api/data2重定向到同一个位置(从而处理像404这样的错误)。或者我有一个/api/data1和/api/data2的脚本,每个脚本都有单独的重定向,然后是404的通用catchall(对于404,我总是希望返回JSON/XML而不是HTML,所以我至少需要基于Accept头返回逻辑)


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

是的,您使用的是前端控制器。前端控制器可以像/api处理请求后的第一件事一样使用约定 i、 e

/api/firstprocessor/method1

/api/firstprocessor/method2

/api/第二处理器/方法14

您可以查看Zend_框架以获得一个实际的例子,或者它可以是像

$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);
    }
}

然后,所有脚本都有一个execute方法,它使用$request获取$\u get或$\u POST变量

是的,您使用的是前端控制器。前端控制器可以像/api处理请求后的第一件事一样使用约定 i、 e

/api/firstprocessor/method1

/api/firstprocessor/method2

/api/第二处理器/方法14

您可以查看Zend_框架以获得一个实际的例子,或者它可以是像

$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);
    }
}

然后,所有脚本都有一个execute方法,它使用$request获取$\u get或$\u POST变量

好的,因此前端控制器实际上不会通过Web服务器调用另一个API节,而是在自己的执行过程中执行该节的脚本(如上面示例中的data1)?是的,这是做itOkay的一个相当标准的方式,很棒,这让我有很多思考的余地。谢谢。好的,那么前端控制器实际上并没有通过Web服务器调用另一个API节,而是在它自己的执行过程中执行该节的脚本(如上面示例中的data1)?是的,这是一种非常标准的执行itOkay的方法。很好,这给了我很多思考。谢谢