lumen Restful Api 接口規(guī)范輸出格式整合

配置統(tǒng)一輸出格式

修改 app\Http\Controllers\Controller.php 控制器文件

添加以下內(nèi)容:


    /**
     * 獲取成功輸出
     * @param array $data
     * @param string $tip
     * @param int $httpCode
     * @return mixed
     */
    public function success($data=array(),$tip='請(qǐng)求成功',$httpCode=200){
        return response()->json(array(
            'status' => 200,
            'success'=>false,
            'data'=>$data,
            'tip'=>$tip
        ),$httpCode);
    }


    /**
     * 錯(cuò)誤提示輸出
     * @param $erroeCode
     * @param string $tip
     * @param int $httpCode
     * @return mixed
     */
    public function error($erroeCode,$tip='請(qǐng)求失敗',$httpCode=400){
        return response()->json(array(
            'status' => $httpCode,
            'success'=>false,
            'error'=>array(
                'code'=>$erroeCode,
                'message'=>trans("errorCode.{$erroeCode}")
            ),
            'tip'=>$tip
        ),$httpCode);
    }


使用

在控制器內(nèi)直接調(diào)用

//成功
return $this->success();

//錯(cuò)誤
return $this->error(40004);

返回格式說明

  • 返回錯(cuò)誤信息
參數(shù)名 類型 說明
status int http狀態(tài)碼
success blood 是否獲取成功
error object 錯(cuò)誤信息
-- code int 錯(cuò)誤碼
-- message string 錯(cuò)誤信息
tip string 提示信息

{
    "status": 400,
    "success": false,
    "error": {
        "code": 40004,
        "message": "參數(shù)無效"
    },
    "tip": "請(qǐng)求失敗"
}

  • 返回結(jié)果格式
參數(shù)名 類型 說明
status int http狀態(tài)碼
success blood 是否獲取成功
data object或array 返回的結(jié)果數(shù)據(jù)
-- xxx ~ ~
-- xxx ~ ~
-- xxx ~ ~
tip string 提示信息

{
    "status": 200,
    "success": true,
    "data": {
        "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIU...",
        "token_type": "bearer",
        "expires_in": 3600
    },
    "tip": "請(qǐng)求成功"
}

添加狀態(tài)碼配置

  • 添加http狀態(tài)碼提示信息文件到目錄 resources\lang\zh-CN\httpCode.php

httpCode.php 內(nèi)容如下:


<?php

return [
    100=>'客戶端應(yīng)繼續(xù)其請(qǐng)求',
    101=>'切換協(xié)議。服務(wù)器根據(jù)客戶端的請(qǐng)求切換協(xié)議。只能切換到更高級(jí)的協(xié)議,例如,切換到HTTP的新版本協(xié)議',

    200=>'請(qǐng)求成功',
    201=>'成功請(qǐng)求并創(chuàng)建了新的資源',
    202=>'已經(jīng)接受請(qǐng)求,但未處理完成',
    203=>'非授權(quán)信息',
    204=>'服務(wù)器成功處理,但未返回內(nèi)容。',
    205=>'服務(wù)器處理成功,用戶終端(例如:瀏覽器)應(yīng)重置文檔視圖。',
    206=>'服務(wù)器成功處理了部分請(qǐng)求',

    300=>'(多種選擇) 針對(duì)請(qǐng)求,服務(wù)器可執(zhí)行多種操作',
    301=>'(永久移動(dòng)) 請(qǐng)求的資源已永久移動(dòng)到新位置',
    302=>'臨時(shí)移動(dòng)) 服務(wù)器目前從不同位置的資源響應(yīng)請(qǐng)求,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來進(jìn)行以后的請(qǐng)求。',
    303=>'(查看其他位置) 請(qǐng)求者應(yīng)當(dāng)對(duì)不同的位置使用單獨(dú)的 GET 請(qǐng)求來檢索響應(yīng)時(shí),服務(wù)器返回此代碼',
    304=>'(未修改) 自從上次請(qǐng)求后,請(qǐng)求的資源未修改過。 服務(wù)器返回此響應(yīng)時(shí),不會(huì)返回資源內(nèi)容。',
    305=>'(使用代理) 請(qǐng)求者只能使用代理訪問請(qǐng)求的資源。 如果服務(wù)器返回此響應(yīng),還表示請(qǐng)求者應(yīng)使用代理。',
    307=>'(臨時(shí)重定向) 服務(wù)器目前從不同位置的資源響應(yīng)請(qǐng)求,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來進(jìn)行以后的請(qǐng)求。',

    400=>'(錯(cuò)誤請(qǐng)求) 服務(wù)器不理解請(qǐng)求的語法',
    401 =>'(未授權(quán)) 請(qǐng)求要求身份驗(yàn)證。 對(duì)于需要登錄的資源,服務(wù)器可能返回此響應(yīng)。',
    403=>'(禁止) 服務(wù)器拒絕請(qǐng)求',
    404=>'(未找到) 服務(wù)器找不到請(qǐng)求的資源',
    405=>'(方法禁用) 禁用請(qǐng)求中指定的方法',
    406=>'(不接受) 無法使用請(qǐng)求的內(nèi)容特性響應(yīng)請(qǐng)求的資源',
    407=>'(需要代理授權(quán)) 此狀態(tài)代碼與 401(未授權(quán))類似,但指定請(qǐng)求者應(yīng)當(dāng)授權(quán)使用代理',
    408=>'(請(qǐng)求超時(shí)) 服務(wù)器等候請(qǐng)求時(shí)發(fā)生超時(shí)',
    409=>'(沖突) 服務(wù)器在完成請(qǐng)求時(shí)發(fā)生沖突。 服務(wù)器必須在響應(yīng)中包含有關(guān)沖突的信息',
    410=>'(已刪除) 如果請(qǐng)求的資源已永久刪除,服務(wù)器就會(huì)返回此響應(yīng)',
    411=>'(需要有效長度) 服務(wù)器不接受不含有效內(nèi)容長度標(biāo)頭字段的請(qǐng)求',
    412=>'(未滿足前提條件) 服務(wù)器未滿足請(qǐng)求者在請(qǐng)求中設(shè)置的其中一個(gè)前提條件',
    413=>'(請(qǐng)求實(shí)體過大) 服務(wù)器無法處理請(qǐng)求,因?yàn)檎?qǐng)求實(shí)體過大,超出服務(wù)器的處理能力',
    414=>'(請(qǐng)求的 URI 過長) 請(qǐng)求的 URI(通常為網(wǎng)址)過長,服務(wù)器無法處理(請(qǐng)求的 URI 過長) 請(qǐng)求的 URI(通常為網(wǎng)址)過長,服務(wù)器無法處理',
    415=>'(不支持的媒體類型) 請(qǐng)求的格式不受請(qǐng)求頁面的支持',
    416=>'(請(qǐng)求范圍不符合要求) 如果頁面無法提供請(qǐng)求的范圍,則服務(wù)器會(huì)返回此狀態(tài)代碼',
    417=>'(未滿足期望值) 服務(wù)器未滿足"期望"請(qǐng)求標(biāo)頭字段的要求',

    500=>'(服務(wù)器內(nèi)部錯(cuò)誤) 服務(wù)器遇到錯(cuò)誤,無法完成請(qǐng)求。',
    501=>'(尚未實(shí)施) 服務(wù)器不具備完成請(qǐng)求的功能。 例如,服務(wù)器無法識(shí)別請(qǐng)求方法時(shí)可能會(huì)返回此代碼。',
    502=>'(錯(cuò)誤網(wǎng)關(guān)) 服務(wù)器作為網(wǎng)關(guān)或代理,從上游服務(wù)器收到無效響應(yīng)。(錯(cuò)誤網(wǎng)關(guān)) 服務(wù)器作為網(wǎng)關(guān)或代理,從上游服務(wù)器收到無效響應(yīng)。',
    503=>'(服務(wù)不可用) 服務(wù)器目前無法使用(由于超載或停機(jī)維護(hù))。 通常,這只是暫時(shí)狀態(tài)。',
    504=>'(網(wǎng)關(guān)超時(shí)) 服務(wù)器作為網(wǎng)關(guān)或代理,但是沒有及時(shí)從上游服務(wù)器收到請(qǐng)求。',
    505=>'(HTTP 版本不受支持) 服務(wù)器不支持請(qǐng)求中所用的 HTTP 協(xié)議版本。',

];



  • 添加錯(cuò)誤碼提示信息文件到目錄 resources\lang\zh-CN\errorCode.php

errorCode.php 內(nèi)容如下:

<?php


//根據(jù) “狀態(tài)碼&自定義的錯(cuò)誤編號(hào)” 的方式
return [
    10001=>'未知錯(cuò)誤',
    //客戶端錯(cuò)誤
    40001=>'參數(shù)不能為空',
    40002=>'參數(shù)不齊全',
    40003=>'參數(shù)錯(cuò)誤',
    ...
    //服務(wù)端錯(cuò)誤
    50001=>'服務(wù)端錯(cuò)誤',
    ...

];



調(diào)用方式:trans 函數(shù)


//調(diào)用
trans("httpCode.404");

trans("errorCode.40001");


//json
return Responder::error(50001,trans('errorCode.50001'))->respond();


輸入圖片說明

框架報(bào)錯(cuò)返回 json 格式配置

修改文件 app\Exceptions\Handler.php

把 function render 修改 如下:


   /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse
     */
    public function render($request, Exception $e)
    {

        //框架自帶數(shù)據(jù)驗(yàn)證錯(cuò)誤信息返回處理
        if($e instanceof \Illuminate\Validation\ValidationException){
            $errors = $e->errors();
            return $this->errorEcho($e->status,reset($errors)[0]);
        }

        if(method_exists($e,'getStatusCode')){
            //json返回 http錯(cuò)誤提示信息
            $http_code = $e->getStatusCode();
            switch ($http_code){
                case $http_code>=400:
                    return $this->errorEcho($e->getStatusCode(),$e->getMessage());
                    break;
                default:
                    return parent::render($request, $e);
            }
        }

        return parent::render($request, $e);

    }

    
    /**
     * 自定義輸出格式
     * @param  $httpCode
     * @param  $msg
     * @return \Illuminate\Http\Response
     */
    private function errorEcho($httpCode,$msg=''){
        if($msg == ''){
            $msg = trans("httpCode.{$httpCode}");
        }
        return response()->json(array(
            'status' => $httpCode,
            'success'=>false,
            'error'=>array(
                'code'=>$httpCode,
                'message'=>$msg
            )
        ),$httpCode);
    }


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,494評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,714評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,186評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,410評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,940評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,776評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,976評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,210評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評(píng)論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,654評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,958評(píng)論 2 373

推薦閱讀更多精彩內(nèi)容