W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
先在這里感謝phalapi框架創(chuàng)始人@dogstar,為我們提供了這樣一個(gè)優(yōu)秀的開源框架.
這一小節(jié)主要講一下請(qǐng)求(參數(shù)驗(yàn)證),返回(怎么返回自己想要的結(jié)果),官方文檔也有比較詳細(xì)的說明所以在有些比較基礎(chǔ)的地方就一筆帶過,講一點(diǎn)比較實(shí)用在項(xiàng)目開發(fā)中怎么使用phalapi框架定制出自己想要的請(qǐng)求和返回結(jié)果.
請(qǐng)先通讀:
[1.12] 參數(shù)規(guī)則:接口參數(shù)規(guī)則配置
[1.13] 統(tǒng)一的接口請(qǐng)求方式:?sevice=XXX.XXX
[1.14] 統(tǒng)一的返回格式和結(jié)構(gòu):ret data msg
附上:
喵了個(gè)咪的博客:w-blog.cn
官網(wǎng)地址:http://www.phalapi.net/
開源中國Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release
稍微看過Demo代碼的童鞋和讀了官方文檔的童鞋應(yīng)該都已經(jīng)知道,請(qǐng)求參數(shù)驗(yàn)證是通過模塊文件中的getRules方法進(jìn)行過濾校驗(yàn)的
當(dāng)然還有default默認(rèn)值,默認(rèn)值一般不和requie同時(shí)出現(xiàn),基本上有了這些框架自帶的參數(shù)過濾校驗(yàn)基本上可以滿足大家的需求, 在代碼層面使用$this->參數(shù)名就能獲取到請(qǐng)求的值(這里建議請(qǐng)求的參數(shù)名與獲取的參數(shù)名,名稱保持一致避免因?yàn)槊Q混淆導(dǎo)致的出錯(cuò))
那么具體的業(yè)務(wù)需求來了,大家都知道get請(qǐng)求不安全一般要是傳遞參數(shù)都需要使用post請(qǐng)求,在phalapi中自帶接受請(qǐng)求機(jī)制是接受_REQUEST 也就是get請(qǐng)求和post請(qǐng)求通通接受,怎么做到只接受post參數(shù)而不接受get參數(shù)呢
官方文檔有說:
但是這樣有個(gè)弊端,包括接口名稱在內(nèi)的service參數(shù)許必須用post請(qǐng)求傳遞才能生效,可以在init.php的最前面加上想從get獲取的參數(shù)負(fù)值給post($_POST['service'] = $_GET['service'];)但是不是很推薦這樣使用,如果要從根本上解決問題就需要使用自定義的攔截器了(如何搭建使用攔截器會(huì)在后面的進(jìn)階篇的項(xiàng)目實(shí)踐講到)
返回我么用個(gè)最簡(jiǎn)單的例子說明,就是官方自帶的默認(rèn)方法
大家可以看下代碼層
public function index() {
return array(
'title' => 'Hello World!',
'content' => T('Hi {name}, welcome to use PhalApi!', array('name' => $this->username)),
'version' => PHALAPI_VERSION,
'time' => $_SERVER['REQUEST_TIME'],
);
}
在接口榮return的內(nèi)容是在返回值的data參數(shù)里面(這樣已經(jīng)是一個(gè)約定俗成的規(guī)范了)
那么有的人就說了msg里面怎么沒有值啊,如果是登錄成功了是不是應(yīng)該返回登錄成功的提示?其實(shí)這些都是已經(jīng)封裝好的方法大家在Default.index接口的最前面加上DI()->response->setMsg('獲取參數(shù)成功');就能看到如下返回:
這樣就有了,那么又有的人說了ret和msg的名字可以修改嗎(這種情況經(jīng)常出現(xiàn)因?yàn)橐嫒堇蠘I(yè)務(wù),或者公司內(nèi)部已經(jīng)約定俗成)當(dāng)然是能修改的,大家打開/PhalApi/Response.php這個(gè)文件里面可以看到一個(gè)getResult方法
public function getResult() {
$rs = array(
'ret' => $this->ret,
'data' => $this->data,
'msg' => $this->msg,
);
return $rs;
}
這里就可以定義返回的key是什么我們把ret改成code就能得到如下返回
那么如果成功的表示是1怎么辦?在Response.php開頭就有一個(gè)變量設(shè)置了成功的返回值位200大家可以根據(jù)自己的需求改成任何想要的返回值.
/**
* @var int $ret 返回狀態(tài)碼,其中:200成功,400非法請(qǐng)求,500服務(wù)器錯(cuò)誤
*/
protected $ret = 200;
講了這么多都是圍繞著成功所說的,當(dāng)然我們經(jīng)常會(huì)遇到失敗的情況我們要如何應(yīng)對(duì)呢?大家試著在Default.index接口前面加上如下一段代碼:
throw new PhalApi_Exception_BadRequest('失敗了');
會(huì)得到如下結(jié)果:
這就是所謂的報(bào)錯(cuò)機(jī)制當(dāng)然這個(gè)報(bào)錯(cuò)機(jī)制也是可以定制的,大家可以進(jìn)入到PhalApi_Exception_BadRequest看一下
class PhalApi_Exception_BadRequest extends PhalApi_Exception{
public function __construct($message, $code = 0) {
parent::__construct(
T('Bad Request: {message}', array('message' => $message)), 400 + $code
);
}
}
失敗默認(rèn)$code是0+400,如果你在'失敗了'后面加上一個(gè)參數(shù)
throw new PhalApi_Exception_BadRequest('失敗了',1);
那么code就會(huì)返回401,當(dāng)然你也可以去掉默認(rèn)的+400那么就會(huì)返回你輸入的值了,具體也是看業(yè)務(wù)需求
從本小節(jié)可以看出phalapi框架確實(shí)很靈活完全可以按照自己定義想要的業(yè)務(wù)需求,而且報(bào)錯(cuò)機(jī)制也非常優(yōu)雅,在本節(jié)后也希望大家能動(dòng)手去嘗試一下各種各樣不同的請(qǐng)求以及返回,下一小節(jié)會(huì)講返回結(jié)果國際化高可用以及自動(dòng)生成文檔.
注:筆者能力有限有說的不對(duì)的地方希望大家能夠指出,也希望多多交流!
官網(wǎng)QQ交流群:421032344 歡迎大家的加入!
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: