上次我們已經帶出API路徑,這次我們要寫一個函式去驗證有哪些可以去使用。
首先我們要先新增一個設定檔來管理所有的API,我們在config
裡新增一個routes_api.php
的檔案,接著新增設定:
<?php
$config['routes_api'] = array(
);
?>
接著我們進入config/autoload.php
來把設定載入:
$autoload['config'] = array('global', 'code_success', 'code_error', 'routes_api');
下一步我們回到controllers/Api.php
針對authenticate
來驗證:
function authenticate($path_name, $func_name) {
// 驗證設定檔是否有符合規則
$auth = $this->check_api_file($path_name, $func_name);
echo json_encode($auth);
// echo $path_name . ': ' . $func_name;
}
接著在下方新增check_api_file
的函式來驗證:
function check_api_file($path_name, $func_name) {
// 取得API清單
$routes = $this->config->item('routes_api');
// 確認是否有指定的API路徑與資料
if (isset($routes[$path_name]) && isset($routes[$path_name][$func_name])) {
// 有此API可以進行接下來動作
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'success', 'GET_DATA_SUCCESS', $this->language);
$json_arr['path'] = $path_name;
$json_arr['func'] = $routes[$path_name][$func_name]; // 取得名稱
} else {
// 找不到API,回報錯誤
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'error', 'DATA_FAIL', $this->language);
}
return $json_arr; // 回傳結果
}
接著我們分別在config/code_success.php
跟config/code_error.php
加入新的成功與錯誤訊息:
!#code_success.php
/**
* @apiDefine sucCode_20002
* @apiSuccess GET_DATA_SUCCESS 20002 取得資料成功
*/
$config['suc_code']['GET_DATA_SUCCESS'] = array(
"sys_code"=> "200",
"sys_num"=> "20002",
"sys_msg"=> array(
"zh-tw"=> '取得資料成功',
"en-us"=> 'Get data Success'
)
);
!#code_error.php
/**
* @apiDefine errCode_40002
* @apiError DATA_FAIL 40002 資料位置存取錯誤
*/
$config['err_code']['DATA_FAIL'] = array(
"sys_code"=> "500",
"sys_num"=> "40002",
"sys_msg"=> array(
"zh-tw"=> '資料位置存取錯誤',
"en-us"=> 'Resource can\'t access'
)
);
如此一來當沒有被寫入到routes_api
的API就會被回報錯誤,接著我們在routes_api
新增測試的API:
<?php
$config['routes_api'] = array(
'user'=> array(
'get_user'=> 'get_user'
)
);
?>
接著我們再透過網址去測試:http://ip-address/api/user/get_user
假設如果API不在名單上呢?http://ip-address/api/user/fake_api
如此一來就可以透過routes_api
來管理各個API,明天我們在把API分成不同的資料夾來管理吧!
Next station ... 改造API Part3