PhalApi框架使用筆記
什么是PhapApi
PhalApi是一個(gè)PHP輕量級(jí)開(kāi)源接口框架纱意,致力于快速開(kāi)發(fā)接口服務(wù)惶桐。 支持HTTP/SOAP/RPC等協(xié)議,可用于搭建接口/微服務(wù)/RESTful接口/Web Services,
.
│
├── PhalApi //PhalApi框架公给,后期可以整包升級(jí)
│
│
├── Public //對(duì)外訪問(wèn)目錄,建議隱藏PHP實(shí)現(xiàn)
│ └── demo //Demo服務(wù)訪問(wèn)入口
│
│
├── Config //項(xiàng)目接口公共配置蜘渣,主要有:app.php, sys.php, dbs.php
├── Data //項(xiàng)目接口公共數(shù)據(jù)
├── Language //項(xiàng)目接口公共翻譯
├── Runtime //項(xiàng)目接口運(yùn)行文件目錄淌铐,用于存放日記,可軟鏈到別的區(qū)
│
│
└── Demo //應(yīng)用接口服務(wù)宋梧,名稱自取匣沼,可多組
├── Api //接口響應(yīng)層
├── Domain //接口領(lǐng)域?qū)? ├── Model //接口持久層
└── Tests //接口單元測(cè)試
PhalApi核心思想
核心思想:DI依賴注入
PhalApi框架三層結(jié)構(gòu)Api+Domain+Model模式
1.1 Api層
它會(huì)通過(guò)控制器把請(qǐng)求轉(zhuǎn)發(fā)到service層作處理,并將處理結(jié)果在頁(yè)面展示捂龄,所以Api更像擔(dān)當(dāng)控制器(C)的作用释涛。
1.2 Domain層
Domain層主要負(fù)責(zé)的是具體的業(yè)務(wù)實(shí)現(xiàn),如數(shù)據(jù)獲取,一個(gè)Domain方法就是一個(gè)小的業(yè)務(wù)具體實(shí)現(xiàn)(注意盡量把業(yè)務(wù)劃分得細(xì)一點(diǎn)方便通用)
1.3 Model層
數(shù)據(jù)庫(kù)操作單獨(dú)提煉出來(lái)統(tǒng)一處理
PhalApi通用公共函數(shù)和 攔截器過(guò)濾器
公用函數(shù)和攔截器
1 公共函數(shù)
首先在我們的根目錄建立一個(gè)文件夾叫做general通用的意思,里面分別有兩個(gè)文件夾Common(受TP的影響)和Intercept兩個(gè)文件,我們?cè)诶锩娣湃胛覀冏约旱奈募?當(dāng)然需要按照正確的規(guī)則比如Common_Base等
然后我們要使用的話當(dāng)然要注冊(cè)我們這個(gè)general文件作為自帶加載文件,然后注冊(cè)自己需要用的類,如下在入口文件index.php
進(jìn)行注入
/** ---------------- 通用方法加載 ---------------- **/
//加載項(xiàng)目通用文件
DI()->loader->addDirs('General');
//通用函數(shù)基礎(chǔ)類
DI()->base = new Common_Base();
2 攔截器
PhalApi已經(jīng)有自帶的攔截器倦沧,使用時(shí)一樣需要先注入
加入我們需要對(duì)
token
進(jìn)行校驗(yàn)唇撬,一些方法是需要驗(yàn)證,有些方法又是不需要驗(yàn)證token
.我們需要怎么實(shí)現(xiàn)呢?
可以在項(xiàng)目目錄 Config/app.php
進(jìn)行定義一個(gè)數(shù)組展融,數(shù)組包括的是需要驗(yàn)證token
的類方法名
/**
* 需要帶Token的接口
*/
apiTokenRules' => array(
'User.info',
'User.updateInfo',
)
我們定義好相關(guān)需要校驗(yàn)token
的數(shù)組窖认,在 Filter下面的 SimpleToken
來(lái)進(jìn)行校驗(yàn),所有的接口訪問(wèn)都會(huì)走改注冊(cè)了的token校驗(yàn)方法,我們就需要在校驗(yàn)方法里面做過(guò)濾攔截,
public function check() {
$service = DI()->request->get('service');
$app=DI()->config->get('app');
$app = json_decode(json_encode($app),true);
$apiTokenRules = $app['apiTokenRules'];
if (in_array($service,$apiTokenRules)) {
$allParams = DI()->request->getAll();
$token = isset($allParams['token']) ? $allParams['token'] : '';
$user_id = $allParams['user_id'];
if (empty($user_id)){
throw new PhalApi_Exception_BadRequest('缺少必要參數(shù)user_id');
}
$service_token = DI()->cache->get($user_id.'token');
if (empty($service_token)){
throw new PhalApi_Exception_BadRequest('請(qǐng)重新登錄',99);
}else{
if (strcmp($token,$service_token) !== 0){
DI()->logger->debug('Wrong Token', array('needToken' => $service_token));
throw new PhalApi_Exception_BadRequest('Token錯(cuò)誤,請(qǐng)重新登錄',99);
}else{
DI()->cache->set($user_id.'token',$service_token,24*60*60);
}
}
}
}
PhalApi 第三方SDK使用集成方法
參考大神的OSC@GIT倉(cāng)庫(kù) https://github.com/phalapi/phalapi-library 告希,倉(cāng)庫(kù)有比較多的SDK包 供下載使用
git clone https://github.com/phalapi/phalapi-library.git
以短信SMS 容聯(lián)云短信服務(wù)器拓展為例
配置方式非常簡(jiǎn)單只需要把拓展下載下來(lái)放入Library文件內(nèi)即可,然后就可以使用如下方法進(jìn)行實(shí)例,文件名稱以
Lite.php
為準(zhǔn),再到根目錄進(jìn)行注入使用,
DI()->sms= new SMS_Lite();
項(xiàng)目中添加Common模塊
Common目錄下是放置一些公共類扑浸,這里只是作為一個(gè)通常的劃分目錄,如簽名類燕偶,這里沒(méi)有過(guò)多的規(guī)范,可以這么理解喝噪,小的公共類放到Common;若是大的公共庫(kù)或依賴于第三方SDK的指么,可以封裝到擴(kuò)展類庫(kù)中
使用的時(shí)候
DI()->functions = new Common_Functions();
// DI()->functions ="Common_Functions";
$res= DI()->functions->HttpGet($url);
參看PhapApi
https://github.com/phalapi/phalapi/
https://www.phalapi.net/