这实际上取决于您的实施。有些遵循架构,其中每个函数都将数据作为数组返回。即使对于查询返回的数据也以小块数组的形式返回。这完全取决于您如何优化或编写脚本。假设您正在获取所有联系人,并且如果您在 DB 中有 10,000 个联系人并且您将所有联系人都返回到一个数组中,那是个坏主意。如果您希望函数将数据作为数组返回,请使用分页并以少量返回。
我遇到过这个问题,我们有一个用 PHP/Mysql 编写的大型 Web 应用程序。随着时间的推移,我们在不同的类中有数千个函数。现在我们必须开发一个具有不同功能的 REST API。主要问题是我们没有使用不同的函数来返回查询对象,一些返回数组,一些返回布尔值等等。API 应以 JSON 格式返回数据。现在我们必须选择使用现有代码来实现不同的功能,或者为 API 重新编写新代码。第二选择更贵,所以我们只剩下第一选择。但是我提到的问题远不止这些方法将返回不同的类型,我们是否真的需要编写更多代码来检查调用了哪个函数以及是否说函数“xyz()” 被调用,我们知道它返回的查询对象然后循环遍历它生成数组,然后生成 json。不,那不是一个坏主意,需要付出很多努力,然后最好编写单独的代码。
所以我们遵循以下方法。
我们的 api 调用看起来像
www.api.oursite.com/api/v1/Resource/Method?param=....
现在我们捕获资源和方法,其中资源是类名,方法是该类的方法名。
所以我们知道我们必须调用 Resource->Method()
现在我们有一个名为 ResourceMethodMap.class.php 的类,它包含数组
static $resource_method_map = array(
"Users"=>array(
"getUserInfo"=> // gets the user info
array(
"return"=>"array",
"accessToken"=>true
)
),
....
...
)
所以 API 请求处理代码会做类似的事情
public function call_method($resource = "",$method=""){
if($resource == "") $resource = $this->get_resource();
if($method == "") $method = $this->get_api_method();
if (class_exists($resource)) {
$resource_obj = new $resource();
// Parse the method params as array
$param_array = $this->parse_method_params($resource,$method);
if(false !== $param_array){
$result = call_user_func_array(array($resource_obj, $method), $param_array);
}else{
$result = $resource_obj->$method() ;
}
return $this->process_return_data($resource,$method,$result,$resource_obj);
}else{
$this->setMessage("Invalid Resource");
return false ;
}
}
这里函数 process_return_data() 会将返回的数据转换为
函数 process_return_data($resource,$method,$ret_val,$resource_obj = NULL){ if(array_key_exists("return",ResourceMethodMap::$resource_method_map[$resource][$method])){ $return_type = ResourceMethodMap::$resource_method_map [$resource][$method]["return"]; $return_array= 数组();switch($return_type){ case 'boolean': if(false === $ret_val){ return false ; }else{ if(is_array($ret_val)){ return $ret_val ; }elseif(true === $ret_val){ return $ret_val ; }else{ $return_array[] = $ret_val ; 返回 $return_array ;
} } 休息; 案例“数组”:返回 $ret_val ;休息; } ..... } }
所以是的,这完全取决于开发人员他们希望如何返回他们的数据。上面的例子只是我们实现的一种实时场景。
我已经发布了她的完整代码http://codepad.org/MPY1gVed看看