iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 25
0

上次我們已經完成設定的部分,這次我們打開controllers/Api.php

以下是我們先前完成的驗證API函式:

  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 {
        // #1
        // 找不到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; // 回傳結果
  }

接著我們在上面的#1地方加入驗證RESTful API,我們新建驗證的函式:


以上省略...
 
} else {
  $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);
  }
}

接著我們可以透過check_api_table來驗證是否有在名單內:

  // 確認是否在routers_table名單上
  function check_api_table($path_name, $func_name) {
    $methods = $this->config->item('routes_table');
    if (isset($methods[$path_name])) {
      $work = false;
      foreach ($methods[$path_name]['method'] as $key => $value) {
          if ($value == $func_name) $work = $value;
      }
      return $work;
    } else {
      return false;
    }
  }

如此一來就可以完成驗證,
明天我們再把這些內容去分別呼叫不同的參數

Next station ... RESTful API


上一篇
[Day24] RESTful API Part1
下一篇
[Day26] RESTful API Part3
系列文
你說Codeigniter還能怎麼做?30

尚未有邦友留言

立即登入留言