新版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開發的深度優化。