上次我們終於完成自訂API的部分,然而還有一點小問題,我們似乎沒有特別限制API到底是用GET還是POST,所以這次我們要來解決這個問題。
首先問題的源頭在於controllers/Api.php
裡面的get_post_data
,這個函式是會抓取目前所有的GET與POST資料並且回傳回去,接下來我們就從這裡開始動手。
我們打開config/routes_api.php
檔案進行修改:
!#原始
<?php
$config['routes_api'] = array(
'user'=> array(
'get_user'=> 'get_user'
)
);
?>
!#修改後
<?php
$config['routes_api'] = array(
'user'=> array(
'get'=> array(
'get_user'=> 'get_user'
),
'post'=> array()
)
);
?>
如此一來就能分辨到底是get
還是post
了,接著回到controllers/Api.php
找到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]['get'][$func_name]) || isset($routes[$path_name]['post'][$func_name]))) {
if (isset($routes[$path_name]['get'][$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]['get'][$func_name]; // 取得名稱
$json_arr['type'] = 'get'; // 傳輸方法
} else if (isset($routes[$path_name]['post'][$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]['post'][$func_name]; // 取得名稱
$json_arr['type'] = 'post'; // 傳輸方法
} else {
// 找不到API,回報錯誤
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'error', 'DATA_FAIL', $this->language);
}
} else {
// 找不到API,回報錯誤
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'error', 'DATA_FAIL', $this->language);
}
return $json_arr; // 回傳結果
}
透過上面方法能過辨識get
or post
兩種方法並傳輸回去,告訴authenticate
確認有此API與他的方法是什麼,我們在取得資料中一段加入類型參數:
$get_post_image_data = array_merge($get_post_image_data, $this->get_post_data($auth['type']));
接著到下方的get_post_data
加入:
// 取得傳輸進來的資料
function get_post_data($type) {
if ($type == 'get') {
return $this->input->get();
} else if ($type == 'post') {
return $this->input->post();
} else {
return array();
}
}
接著我們透過POSTMAN測試,因為我們設定get_user
是GET
方式,當我們使用POST
方法時:
他就無法確實抓到資料,但是當我們使用GET
傳輸時:
如此一來就能就過此方法辨認是否使用正確的方法或是參數了呢!
Next station ... 通用Models