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ù)無(wú)效"
    },
    "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)求的語(yǔ)法',
    401 =>'(未授權(quán)) 請(qǐng)求要求身份驗(yàn)證。 對(duì)于需要登錄的資源,服務(wù)器可能返回此響應(yīng)。',
    403=>'(禁止) 服務(wù)器拒絕請(qǐng)求',
    404=>'(未找到) 服務(wù)器找不到請(qǐng)求的資源',
    405=>'(方法禁用) 禁用請(qǐng)求中指定的方法',
    406=>'(不接受) 無(wú)法使用請(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=>'(需要有效長(zhǎng)度) 服務(wù)器不接受不含有效內(nèi)容長(zhǎng)度標(biāo)頭字段的請(qǐng)求',
    412=>'(未滿足前提條件) 服務(wù)器未滿足請(qǐng)求者在請(qǐng)求中設(shè)置的其中一個(gè)前提條件',
    413=>'(請(qǐng)求實(shí)體過大) 服務(wù)器無(wú)法處理請(qǐng)求,因?yàn)檎?qǐng)求實(shí)體過大,超出服務(wù)器的處理能力',
    414=>'(請(qǐng)求的 URI 過長(zhǎng)) 請(qǐng)求的 URI(通常為網(wǎng)址)過長(zhǎng),服務(wù)器無(wú)法處理(請(qǐng)求的 URI 過長(zhǎng)) 請(qǐng)求的 URI(通常為網(wǎng)址)過長(zhǎng),服務(wù)器無(wú)法處理',
    415=>'(不支持的媒體類型) 請(qǐng)求的格式不受請(qǐng)求頁(yè)面的支持',
    416=>'(請(qǐng)求范圍不符合要求) 如果頁(yè)面無(wú)法提供請(qǐng)求的范圍,則服務(wù)器會(huì)返回此狀態(tài)代碼',
    417=>'(未滿足期望值) 服務(wù)器未滿足"期望"請(qǐng)求標(biāo)頭字段的要求',

    500=>'(服務(wù)器內(nèi)部錯(cuò)誤) 服務(wù)器遇到錯(cuò)誤,無(wú)法完成請(qǐng)求。',
    501=>'(尚未實(shí)施) 服務(wù)器不具備完成請(qǐng)求的功能。 例如,服務(wù)器無(wú)法識(shí)別請(qǐng)求方法時(shí)可能會(huì)返回此代碼。',
    502=>'(錯(cuò)誤網(wǎng)關(guān)) 服務(wù)器作為網(wǎng)關(guān)或代理,從上游服務(wù)器收到無(wú)效響應(yīng)。(錯(cuò)誤網(wǎng)關(guān)) 服務(wù)器作為網(wǎng)關(guān)或代理,從上游服務(wù)器收到無(wú)效響應(yīng)。',
    503=>'(服務(wù)不可用) 服務(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容