ApiAdmin支持在其基礎(chǔ)上直接二次開發(fā)Api,這篇文章將詳細(xì)的說明Api開發(fā)的步驟。
要想讓接口被系統(tǒng)接受,我們需要在后臺添加接口。所有的接口訪問都必須根據(jù)系統(tǒng)自動給出的hash來請求
字段名稱 | 說明 | 備注 |
---|---|---|
接口名稱 | 接口所映射的真實(shí)類和方法 | 類名/方法名【注意區(qū)分大小寫】 |
請求方式 | GET/POST/不限 | 這里將不會限制請求方法,但是如果選擇GET那么POST的參數(shù)會收不到 |
接口映射 | 用于請求接口使用 | 系統(tǒng)自動生成 |
AccessToken | 忽略Token/驗(yàn)證Token | 接口請求是否需要驗(yàn)證AccessToken |
用戶登錄 | 忽略登錄/驗(yàn)證登錄 | 是否驗(yàn)證UserToken |
測試調(diào)試 | 關(guān)閉測試/開啟測試 | 當(dāng)開啟測試的時候,系統(tǒng)不會驗(yàn)證AccessToken,也不會過濾數(shù)據(jù),也不會規(guī)整輸出數(shù)據(jù),但是當(dāng)你傳遞了UserToken的時候,系統(tǒng)還是會驗(yàn)證UserToken的合法性。 |
應(yīng)用描述 | 表明應(yīng)用的作用 | 用于文檔顯示 |
當(dāng)關(guān)閉了測試的時候,ApiAdmin會根據(jù)請求參數(shù)過濾用戶的輸入?yún)?shù),所以,如果不配置請求參數(shù),那么你會獲取不到任何請求參數(shù)。
字段名稱 | 說明 | 備注 |
---|---|---|
字段名稱 | 請求的字段名 | 區(qū)分大小寫 |
數(shù)據(jù)類型 | 自動處理用戶輸入的數(shù)據(jù)類型 | |
默認(rèn)值 | 如果當(dāng)前字段是不必填項(xiàng),系統(tǒng)會自動將默認(rèn)值賦值給指定字段 | |
是否必填 | 選擇必填,如果沒有傳參,系統(tǒng)會報(bào)錯 | |
規(guī)則細(xì)節(jié) | 支持JSON字符串 | 需要配合字符類型使用 |
字段說明 | 用于文檔顯示 |
字符類型 | 規(guī)則示例 | 說明 |
---|---|---|
Integer | {"min":1,"max":10} | 大于1,并且小于10,可以只設(shè)置下限或者只設(shè)置上限 |
String | {"min":1,"max":10} | 字符串長度小于10,并且大于1,可以只設(shè)置下限或者只設(shè)置上限 |
Enum | [0,1,2] | 只能取值0,1,2別的都不可以 |
Float | {"min":1,"max":10} | 大于1,并且小于10,可以只設(shè)置下限或者只設(shè)置上限 |
Mobile | 必須是合法的11位手機(jī)號 | |
Array | {"min":1,"max":10} | 數(shù)組長度大于1并且小于10,可以只設(shè)置下限或者只設(shè)置上限 |
系統(tǒng)不會過濾返回參數(shù),所以開發(fā)者在做數(shù)據(jù)返回的時候一定要處理好字段,但是系統(tǒng)會自動處理返回的參數(shù)的字符類型。不過一定要配置好返回參數(shù)。
返回參數(shù)的配置相對較為簡單,只需要將返回的數(shù)據(jù)上傳即可!
完成數(shù)據(jù)上傳,系統(tǒng)會自動判斷數(shù)據(jù)類型以及字段層級,但是有以下幾點(diǎn)需要注意:
前幾步的配置,基本保證了API的接入,下面將是對API邏輯的處理,打開項(xiàng)目代碼找到
/Application/Home/Api/
,接下來Api邏輯將寫在這里。
接下來我們將以獲取AccessToken為例來闡述API的編寫方法。
<?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; } }
> 注意:上面我們在新增接口的時候,填寫的接口名稱為`BuildToken/getAccessToken`,所以現(xiàn)在的類名稱必須為`BuildToken`,而方法名稱必須為`getAccessToken`。
代碼中有幾點(diǎn)需要說明:
- `public function getAccessToken($param)`,這里的`$param`就是一個參數(shù)名稱,你可以任意命名,同時`$param`是系統(tǒng)處理過的用戶輸入?yún)?shù)。
- 當(dāng)你處理完邏輯,直接`return`數(shù)組就好了,系統(tǒng)會自動捕獲你返回的數(shù)組,并且做后期處理。
### 最后說明
到這里,獲取AccessToken的接口就全部開發(fā)完成了,還有幾點(diǎn)需要闡明:
1. 錯誤輸出使用Response::error();
2. 請使用PostMan測試接口,明確Header參數(shù)和GET/POST參數(shù)。
3. 請查看http://localhost/wikiList.html獲取API文檔。
4. 請查看http://localhost/calculation.html獲取身份令牌計(jì)算算法。
5. 請查看http://localhost/errorList.html獲取錯誤碼細(xì)節(jié)。
更多建議: