請求和返回

2018-11-21 21:28 更新

PHALAPI-入門篇3(請求和返回)

前言

先在這里感謝phalapi框架創(chuàng)始人@dogstar,為我們提供了這樣一個優(yōu)秀的開源框架.

這一小節(jié)主要講一下請求(參數(shù)驗證),返回(怎么返回自己想要的結(jié)果),官方文檔也有比較詳細的說明所以在有些比較基礎的地方就一筆帶過,講一點比較實用在項目開發(fā)中怎么使用phalapi框架定制出自己想要的請求和返回結(jié)果.

請先通讀:

[1.12] 參數(shù)規(guī)則:接口參數(shù)規(guī)則配置
[1.13] 統(tǒng)一的接口請求方式:?sevice=XXX.XXX
[1.14] 統(tǒng)一的返回格式和結(jié)構(gòu):ret data msg

附上:

喵了個咪的博客:w-blog.cn

官網(wǎng)地址:http://www.phalapi.net/

開源中國Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release

1. 請求

稍微看過Demo代碼的童鞋和讀了官方文檔的童鞋應該都已經(jīng)知道,請求參數(shù)驗證是通過模塊文件中的getRules方法進行過濾校驗的

當然還有default默認值,默認值一般不和requie同時出現(xiàn),基本上有了這些框架自帶的參數(shù)過濾校驗基本上可以滿足大家的需求, 在代碼層面使用$this->參數(shù)名就能獲取到請求的值(這里建議請求的參數(shù)名與獲取的參數(shù)名,名稱保持一致避免因為名稱混淆導致的出錯)

那么具體的業(yè)務需求來了,大家都知道get請求不安全一般要是傳遞參數(shù)都需要使用post請求,在phalapi中自帶接受請求機制是接受_REQUEST 也就是get請求和post請求通通接受,怎么做到只接受post參數(shù)而不接受get參數(shù)呢

官方文檔有說:

但是這樣有個弊端,包括接口名稱在內(nèi)的service參數(shù)許必須用post請求傳遞才能生效,可以在init.php的最前面加上想從get獲取的參數(shù)負值給post($_POST['service'] = $_GET['service'];)但是不是很推薦這樣使用,如果要從根本上解決問題就需要使用自定義的攔截器了(如何搭建使用攔截器會在后面的進階篇的項目實踐講到)

2. 返回

2.1 定制成功返回結(jié)果

返回我么用個最簡單的例子說明,就是官方自帶的默認方法

大家可以看下代碼層

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)是一個約定俗成的規(guī)范了)

那么有的人就說了msg里面怎么沒有值啊,如果是登錄成功了是不是應該返回登錄成功的提示?其實這些都是已經(jīng)封裝好的方法大家在Default.index接口的最前面加上DI()->response->setMsg('獲取參數(shù)成功');就能看到如下返回:

這樣就有了,那么又有的人說了ret和msg的名字可以修改嗎(這種情況經(jīng)常出現(xiàn)因為要兼容老業(yè)務,或者公司內(nèi)部已經(jīng)約定俗成)當然是能修改的,大家打開/PhalApi/Response.php這個文件里面可以看到一個getResult方法

 public function getResult() {
    $rs = array(
        'ret' => $this->ret,
        'data' => $this->data,
        'msg' => $this->msg,
    );
    return $rs;
}

這里就可以定義返回的key是什么我們把ret改成code就能得到如下返回

那么如果成功的表示是1怎么辦?在Response.php開頭就有一個變量設置了成功的返回值位200大家可以根據(jù)自己的需求改成任何想要的返回值.

/**
 * @var int $ret 返回狀態(tài)碼,其中:200成功,400非法請求,500服務器錯誤
 */
protected $ret = 200;

2.2 失敗了返回

講了這么多都是圍繞著成功所說的,當然我們經(jīng)常會遇到失敗的情況我們要如何應對呢?大家試著在Default.index接口前面加上如下一段代碼:

throw new PhalApi_Exception_BadRequest('失敗了');

會得到如下結(jié)果:

這就是所謂的報錯機制當然這個報錯機制也是可以定制的,大家可以進入到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
        );
    }
}

失敗默認$code是0+400,如果你在'失敗了'后面加上一個參數(shù)

throw new PhalApi_Exception_BadRequest('失敗了',1);

那么code就會返回401,當然你也可以去掉默認的+400那么就會返回你輸入的值了,具體也是看業(yè)務需求

3. 總結(jié)

從本小節(jié)可以看出phalapi框架確實很靈活完全可以按照自己定義想要的業(yè)務需求,而且報錯機制也非常優(yōu)雅,在本節(jié)后也希望大家能動手去嘗試一下各種各樣不同的請求以及返回,下一小節(jié)會講返回結(jié)果國際化高可用以及自動生成文檔.

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!

官網(wǎng)QQ交流群:421032344 歡迎大家的加入!

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號