API開發(fā)

2018-06-30 10:30 更新

ApiAdmin支持在其基礎(chǔ)上直接二次開發(fā)Api,這篇文章將詳細(xì)的說明Api開發(fā)的步驟。

聲明

新增接口

要想讓接口被系統(tǒng)接受,我們需要在后臺(tái)添加接口。所有的接口訪問都必須根據(jù)系統(tǒng)自動(dòng)給出的hash來請(qǐng)求

新增接口

字段名稱 說明 備注
接口名稱 接口所映射的真實(shí)類和方法 類名/方法名【注意區(qū)分大小寫】
請(qǐng)求方式 GET/POST/不限 這里將不會(huì)限制請(qǐng)求方法,但是如果選擇GET那么POST的參數(shù)會(huì)收不到
接口映射 用于請(qǐng)求接口使用 系統(tǒng)自動(dòng)生成
AccessToken 忽略Token/驗(yàn)證Token 接口請(qǐng)求是否需要驗(yàn)證AccessToken
用戶登錄 忽略登錄/驗(yàn)證登錄 是否驗(yàn)證UserToken
測(cè)試調(diào)試 關(guān)閉測(cè)試/開啟測(cè)試 當(dāng)開啟測(cè)試的時(shí)候,系統(tǒng)不會(huì)驗(yàn)證AccessToken,也不會(huì)過濾數(shù)據(jù),也不會(huì)規(guī)整輸出數(shù)據(jù),但是當(dāng)你傳遞了UserToken的時(shí)候,系統(tǒng)還是會(huì)驗(yàn)證UserToken的合法性。
應(yīng)用描述 表明應(yīng)用的作用 用于文檔顯示

請(qǐng)求參數(shù)

當(dāng)關(guān)閉了測(cè)試的時(shí)候,ApiAdmin會(huì)根據(jù)請(qǐng)求參數(shù)過濾用戶的輸入?yún)?shù),所以,如果不配置請(qǐng)求參數(shù),那么你會(huì)獲取不到任何請(qǐng)求參數(shù)。

請(qǐng)求參數(shù)

字段名稱 說明 備注
字段名稱 請(qǐng)求的字段名 區(qū)分大小寫
數(shù)據(jù)類型 自動(dòng)處理用戶輸入的數(shù)據(jù)類型
默認(rèn)值 如果當(dāng)前字段是不必填項(xiàng),系統(tǒng)會(huì)自動(dòng)將默認(rèn)值賦值給指定字段
是否必填 選擇必填,如果沒有傳參,系統(tǒng)會(huì)報(bào)錯(cuò)
規(guī)則細(xì)節(jié) 支持JSON字符串 需要配合字符類型使用
字段說明 用于文檔顯示

字符類型 規(guī)則示例 說明
Integer {"min":1,"max":10} 大于1,并且小于10,可以只設(shè)置下限或者只設(shè)置上限
String {"min":1,"max":10} 字符串長(zhǎng)度小于10,并且大于1,可以只設(shè)置下限或者只設(shè)置上限
Enum [0,1,2] 只能取值0,1,2別的都不可以
Float {"min":1,"max":10} 大于1,并且小于10,可以只設(shè)置下限或者只設(shè)置上限
Mobile 必須是合法的11位手機(jī)號(hào)
Array {"min":1,"max":10} 數(shù)組長(zhǎng)度大于1并且小于10,可以只設(shè)置下限或者只設(shè)置上限

返回參數(shù)

系統(tǒng)不會(huì)過濾返回參數(shù),所以開發(fā)者在做數(shù)據(jù)返回的時(shí)候一定要處理好字段,但是系統(tǒng)會(huì)自動(dòng)處理返回的參數(shù)的字符類型。不過一定要配置好返回參數(shù)。

返回參數(shù)

返回參數(shù)的配置相對(duì)較為簡(jiǎn)單,只需要將返回的數(shù)據(jù)上傳即可!

上傳數(shù)據(jù)

完成數(shù)據(jù)上傳,系統(tǒng)會(huì)自動(dòng)判斷數(shù)據(jù)類型以及字段層級(jí),但是有以下幾點(diǎn)需要注意:

  • 在配置接口參數(shù)的時(shí)候,連接口都沒有,怎么會(huì)有返回?cái)?shù)據(jù)?對(duì)于這個(gè)先有雞還是先有蛋的問題,不做討論,建議開發(fā)接口的時(shí)候?qū)y(cè)試模式打開,然后開發(fā)完成,獲取到數(shù)據(jù)的時(shí)候再提交。
  • 系統(tǒng)自動(dòng)判斷數(shù)據(jù)類型, 對(duì)于手機(jī)號(hào)碼類型的判斷有錯(cuò)誤,應(yīng)該是String類型,系統(tǒng)給出的是Integer類型,需要手動(dòng)修改。
  • 如果想要讓Api文檔變的更加豐滿,需要單獨(dú)配置字段說明(一個(gè)個(gè)配置哦)。
  • 如果修改返回字段的時(shí)候,只能通過上傳來覆蓋原先的配置,系統(tǒng)會(huì)自動(dòng)將字段名稱(字段名和字段層級(jí))一樣的,不做變更,但是把不存在的字段名刪去,同時(shí)新增多出來的字段。

開始寫代碼

前幾步的配置,基本保證了API的接入,下面將是對(duì)API邏輯的處理,打開項(xiàng)目代碼找到/Application/Home/Api/,接下來Api邏輯將寫在這里。

接下來我們將以獲取AccessToken為例來闡述API的編寫方法。

  1. 創(chuàng)建BuildToken.class.php,必須嚴(yán)格注意大小寫,同時(shí)得帶上.class。
  2. 編寫代碼邏輯。
    
    <?php
    /**
    * 和Token相關(guān)的全部接口
    * @since   2017/03/02 創(chuàng)建
    * @author  zhaoxiang <zhaoxiang051405@gmail.com>
    */
    namespace Home\Api;
    use Admin\Model\ApiAppModel;
    use Home\ORG\ApiLog;
    use Home\ORG\Crypt;
    use Home\ORG\Response;
    use Home\ORG\ReturnCode;
    class BuildToken extends Base {
    public function getAccessToken($param) {
        if (empty($param['app_id'])) {
            Response::error(ReturnCode::EMPTY_PARAMS, '缺少app_id');
        }
        $appObj = new ApiAppModel();
        $appInfo = $appObj->where(array('app_id' => $param['app_id'], 'app_status' => 1))->find();
        if (empty($appInfo)) {
            Response::error(ReturnCode::INVALID, '應(yīng)用ID非法');
        }
        $crypt = new Crypt();
        $signature = $param['signature'];
        unset($param['signature']);
        $sign = $crypt->getAuthToken($appInfo['app_secret'], $param);
        Response::debug($sign);
        if ($sign !== $signature) {
            Response::error(ReturnCode::INVALID, '身份令牌驗(yàn)證失敗');
        }
        $expires = C('ACCESS_TOKEN_EXPIRES');
        $accessToken = S($param['device_id']);
        if ($accessToken) {
            S($accessToken, null);
            S($param['device_id'], null);
        }
        $accessToken = $crypt->getAccessToken($appInfo['app_id'], $appInfo['app_secret']);
        $appInfo['device_id'] = $param['device_id'];
        ApiLog::setAppInfo($appInfo);
        S($accessToken, $appInfo, $expires);
        S($param['device_id'], $accessToken, $expires);
        $return['access_token'] = $accessToken;
        $return['expires_in'] = $expires;

return $return; } }


> 注意:上面我們?cè)谛略鼋涌诘臅r(shí)候,填寫的接口名稱為`BuildToken/getAccessToken`,所以現(xiàn)在的類名稱必須為`BuildToken`,而方法名稱必須為`getAccessToken`。


代碼中有幾點(diǎn)需要說明:
- `public function getAccessToken($param)`,這里的`$param`就是一個(gè)參數(shù)名稱,你可以任意命名,同時(shí)`$param`是系統(tǒng)處理過的用戶輸入?yún)?shù)。
- 當(dāng)你處理完邏輯,直接`return`數(shù)組就好了,系統(tǒng)會(huì)自動(dòng)捕獲你返回的數(shù)組,并且做后期處理。


### 最后說明
到這里,獲取AccessToken的接口就全部開發(fā)完成了,還有幾點(diǎn)需要闡明:
1. 錯(cuò)誤輸出使用Response::error();
2. 請(qǐng)使用PostMan測(cè)試接口,明確Header參數(shù)和GET/POST參數(shù)。
3. 請(qǐng)查看http://localhost/wikiList.html獲取API文檔。
4. 請(qǐng)查看http://localhost/calculation.html獲取身份令牌計(jì)算算法。
5. 請(qǐng)查看http://localhost/errorList.html獲取錯(cuò)誤碼細(xì)節(jié)。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)