ApiAdmin支持在其基礎(chǔ)上直接二次開發(fā)Api,這篇文章將詳細(xì)的說(shuō)明Api開發(fā)的步驟。
要想讓接口被系統(tǒng)接受,我們需要在后臺(tái)添加接口。所有的接口訪問(wèn)都必須根據(jù)系統(tǒng)自動(dòng)給出的hash來(lái)請(qǐng)求
字段名稱 | 說(shuō)明 | 備注 |
---|---|---|
接口名稱 | 接口所映射的真實(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ì)過(guò)濾數(shù)據(jù),也不會(huì)規(guī)整輸出數(shù)據(jù),但是當(dāng)你傳遞了UserToken的時(shí)候,系統(tǒng)還是會(huì)驗(yàn)證UserToken的合法性。 |
應(yīng)用描述 | 表明應(yīng)用的作用 | 用于文檔顯示 |
當(dāng)關(guān)閉了測(cè)試的時(shí)候,ApiAdmin會(huì)根據(jù)請(qǐng)求參數(shù)過(guò)濾用戶的輸入?yún)?shù),所以,如果不配置請(qǐng)求參數(shù),那么你會(huì)獲取不到任何請(qǐng)求參數(shù)。
字段名稱 | 說(shuō)明 | 備注 |
---|---|---|
字段名稱 | 請(qǐng)求的字段名 | 區(qū)分大小寫 |
數(shù)據(jù)類型 | 自動(dòng)處理用戶輸入的數(shù)據(jù)類型 | |
默認(rèn)值 | 如果當(dāng)前字段是不必填項(xiàng),系統(tǒng)會(huì)自動(dòng)將默認(rèn)值賦值給指定字段 | |
是否必填 | 選擇必填,如果沒(méi)有傳參,系統(tǒng)會(huì)報(bào)錯(cuò) | |
規(guī)則細(xì)節(jié) | 支持JSON字符串 | 需要配合字符類型使用 |
字段說(shuō)明 | 用于文檔顯示 |
字符類型 | 規(guī)則示例 | 說(shuō)明 |
---|---|---|
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è)置上限 |
系統(tǒng)不會(huì)過(guò)濾返回參數(shù),所以開發(fā)者在做數(shù)據(jù)返回的時(shí)候一定要處理好字段,但是系統(tǒng)會(huì)自動(dòng)處理返回的參數(shù)的字符類型。不過(guò)一定要配置好返回參數(shù)。
返回參數(shù)的配置相對(duì)較為簡(jiǎn)單,只需要將返回的數(shù)據(jù)上傳即可!
完成數(shù)據(jù)上傳,系統(tǒng)會(huì)自動(dòng)判斷數(shù)據(jù)類型以及字段層級(jí),但是有以下幾點(diǎn)需要注意:
前幾步的配置,基本保證了API的接入,下面將是對(duì)API邏輯的處理,打開項(xiàng)目代碼找到
/Application/Home/Api/
,接下來(lái)Api邏輯將寫在這里。
接下來(lái)我們將以獲取AccessToken為例來(lái)闡述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; } }
> 注意:上面我們?cè)谛略鼋涌诘臅r(shí)候,填寫的接口名稱為`BuildToken/getAccessToken`,所以現(xiàn)在的類名稱必須為`BuildToken`,而方法名稱必須為`getAccessToken`。
代碼中有幾點(diǎn)需要說(shuō)明:
- `public function getAccessToken($param)`,這里的`$param`就是一個(gè)參數(shù)名稱,你可以任意命名,同時(shí)`$param`是系統(tǒng)處理過(guò)的用戶輸入?yún)?shù)。
- 當(dāng)你處理完邏輯,直接`return`數(shù)組就好了,系統(tǒng)會(huì)自動(dòng)捕獲你返回的數(shù)組,并且做后期處理。
### 最后說(shuō)明
到這里,獲取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é)。
更多建議: