新版ThinkPHP针对API开发做了很多的优化,并且不依赖原来的API模式扩展。
## 数据输出
新版的控制器输出采用Response类统一处理,而不是直接在控制器中进行输出,通过设置`default_return_type`就可以自动进行数据转换处理,一般来说,你只需要在控制器中返回字符串或者数组即可,例如如果我们配置:
~~~
'default_return_type'=>'json'
~~~
那么下面的控制器方法返回值会自动转换为json格式并返回。
~~~
namespace app\index\controller;
class Index {
public function index(){
$data = ['name'=>'thinkphp','url'=>'thinkphp.cn'];
return ['data'=>$data,'code'=>1,'message'=>'操作完成'];
}
}
~~~
访问该请求URL地址后,最终可以在浏览器中看到输出结果如下:
~~~
{"data":{"name":"thinkphp","url":"thinkphp.cn"},"code":1,"message":"\u64cd\u4f5c\u5b8c\u6210"}
~~~
> 如果你需要返回其他的数据格式的话,控制器本身的代码无需做任何改变。
核心支持的数据类型包括`html`、`text`、`json`和`jsonp`,其他类型的需要自己扩展,扩展方式为包括两种方式:
第一种方式是调用`Respone::tramsform`方法
~~~
// 对输出数据设置data_to_xml处理函数(支持callable类型)
\think\Response::tramsform('data_to_xml');
~~~
第二种方式是对`return_data`钩子使用行为扩展。
~~~
// 定义行为类
\think\Hook::add('return_data','\app\index\behavior\DataToXml');
// 或者直接使用闭包函数处理
\think\Hook::add('return_data',function(&$data){
// 在这里对data进行处理
});
~~~
## 异常处理
在API开发的情况下,只需要设置好`default_return_type`,就能返回相应格式的异常信息,例如:
~~~
'default_return_type'=>'json'
~~~
当发生异常的时候,就会返回客户端一个json格式的异常信息,例如:
~~~
{"message":"\u53d1\u751f\u9519\u8bef","code":10005}
~~~
然后由客户端决定如何处理该异常。
## 错误调试
由于API开发不方便在客户端进行开发调试,但TP5通过整合SocketLog可以实现远程的开发调试。
设置方式:
~~~
'log' => [
'type' => 'socket',
// socket服务器
'host' => '111.202.76.133',
],
~~~
然后安装chrome浏览器插件后即可进行远程调试,详细参考调试部分。
## IS_API常量
系统还预留了一个IS_API常量,用于后期API开发的深度优化。