上次透過函式來驗證API是否有在名單內,而接下來就針對不同的類型去撰寫,先來看看上次寫的函式Api.php
:
$res = $this->check_api_table($path_name, $func_name);
if ($res) {
// working
} else {
// 找不到API,回報錯誤
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'error', 'DATA_FAIL', $this->language);
}
接著我們加入工作,分別把參數與資料帶入進去:
$res = $this->check_api_table($path_name, $func_name);
if ($res) {
// 取得名單上的API
$rt = $this->config->item('routes_table');
$json_arr = $this->to_work($path_name, $func_name, $this->get_post_data($rt[$path_name]['detals'][$func_name]['type']));
} else {
// 找不到API,回報錯誤
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'error', 'DATA_FAIL', $this->language);
}
接著新增一個函式to_work
:
// 進行日常預設工作
function to_work($path_name, $func_name, $data) {
if ($func_name == 'exist') {
return $this->to_work_exist($path_name, $func_name, $data);
} else if ($func_name == 'get_list') {
return $this->to_work_get_list($path_name, $func_name, $data);
} else if ($func_name == 'get_once') {
return $this->to_work_get_once($path_name, $func_name, $data);
} else if ($func_name == 'insert') {
return $this->to_work_insert($path_name, $func_name, $data);
} else if ($func_name == 'update') {
return $this->to_work_update($path_name, $func_name, $data);
} else if ($func_name == 'delete') {
return $this->to_work_delete($path_name, $func_name, $data);
}
}
我們預設總共會有6種方法,不過如果不夠也可以自己自訂,
我們就先以基礎的修刪改查來下手,接續我們新增接續的函式:
// 檢查名稱是否存在
function to_work_exist($path_name, $func_name, $data) {
}
// 取得特定多筆資料
function to_work_get_list($path_name, $func_name, $data) {
}
// 取得特定單筆資料
function to_work_get_once($path_name, $func_name, $data) {
}
// 新增資料
function to_work_insert($path_name, $func_name, $data) {
}
// 修改資料
function to_work_update($path_name, $func_name, $data) {
}
// 刪除資料
function to_work_delete($path_name, $func_name, $data) {
}
接著我們針對to_work_exist
新增檢查的功能,首先我們寫入需要的內容:
// 檢查名稱是否存在
function to_work_exist($path_name, $func_name, $data) {
// 取得table內容
$methods = $this->config->item('routes_table');
$table = $methods[$path_name]['table'];
$info = $methods[$path_name]['detals'][$func_name];
}
接著驗證我們所需要的元素透過require
:
... 以上省略
// 驗證需要的元素
$required = array();
foreach ($info['require'] as $keyRequired => $valueRequired) {
if (!isset($data[$valueRequired])) array_push($required, $valueRequired);
}
... 以下結尾
接著確認是否有通過驗證,如果沒有就讓他跳出,彈出錯誤:
... 以上省略
// 如果缺少資源跳出
if (sizeof($required) > 0) {
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'error', 'MISSING_DATA', $this->language);
$json_arr['requred'] = $required;
return $json_arr;
}
... 以下結尾
下一步就是進入資料庫首先透過verify
來where
內容:
... 以上省略
// 負責驗證的元素
$verify = array();
foreach ($info['verify'] as $key => $value) {
if (isset($data[$value])) {
// 驗證是否為編號
if ($key == '_id') {
$verify[$key] = new MongoId($data[$value]);
} else {
$verify[$key] = $data[$value];
}
}
}
... 以下結尾
接著再透過我們先前創建的通用Models
來確認資料是否存在,並回傳回去輸出內容:
... 以上省略
// 加入邏輯佇列
$dataQuery['verify'] = $verify;
$dataQuery['table'] = $table;
$response = $this->mod_universal->chk_once($dataQuery);
$json_arr['exist'] = $response;
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'success', 'GET_DATA_SUCCESS', $this->language);
return $json_arr;
... 以下結尾
如此一來就完成我們第一個通用功能,完整函式如下:
// 檢查名稱是否存在
function to_work_exist($path_name, $func_name, $data) {
// 取得table內容
$methods = $this->config->item('routes_table');
$table = $methods[$path_name]['table'];
$info = $methods[$path_name]['detals'][$func_name];
// 驗證需要的元素
$required = array();
foreach ($info['require'] as $keyRequired => $valueRequired) {
if (!isset($data[$valueRequired])) array_push($required, $valueRequired);
}
// 如果缺少資源跳出
if (sizeof($required) > 0) {
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'error', 'MISSING_DATA', $this->language);
$json_arr['requred'] = $required;
return $json_arr;
}
// 負責驗證的元素
$verify = array();
foreach ($info['verify'] as $key => $value) {
if (isset($data[$value])) {
// 驗證是否為編號
if ($key == '_id') {
$verify[$key] = new MongoId($data[$value]);
} else {
$verify[$key] = $data[$value];
}
}
}
// 加入邏輯佇列
$dataQuery['verify'] = $verify;
$dataQuery['table'] = $table;
$response = $this->mod_universal->chk_once($dataQuery);
$json_arr['exist'] = $response;
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'success', 'GET_DATA_SUCCESS', $this->language);
return $json_arr;
}
明天我們再繼續接下去做需要的內容,如果看懂上方函式,也可以舉一反三做下面的內容~
Next station ... RESTful API