• thinkphp api接口 统一结果返回处理类


    20210602 修正

     wqy的笔记:http://www.upwqy.com/details/216.html

    返回结果处理,归根结底 主要是有两点 数据结构和返回的数据类型 

    1、数据类型 :一般情况下,API 需要返回数据类型是JSON

    2、数据结构:需要一个code来表明 返回结果状态,一个msg用户状态的描述 一个data用于包含所需要的返回的数据 

    明白上面两点,后续的无非就是就行封装,具体怎么封装,看个人习惯。

    JsonResponse.php 文件

    namespace appcommon
    esponse;
    use appcommonApiErrCode;
    
    use thinkfacadeLog;
    
    /**
     * Trait JsonResponse
     * @package apphttp
    esponse
     */
    trait JsonResponse
    {
        /**
         * 成功时返回的数据
         * @param $message
         * @param $data
         */
        public function jsonSuccessData($data = ''){
            return $this->jsonResponse(ApiErrCode::success['code'],ApiErrCode::success['msg'],$data);
        }
    
        /**
         * 错误时返回的数据
         * @param $code
         * @param $message
         * @param $data
         */
        public function jsonData($code,$message,$data = ''){
            Log::error([
                'code'=>$code,
                'message'=>$message,
                'data'=>$data
            ]);
            return $this->jsonResponse($code,$message,$data);
        }
    
        /**
         * 接口返回数据结构
         * @param $code
         * @param $message
         * @param $data
         */
        private function jsonResponse($code,$message,$data){
            $content = [
                'code'=>$code,
                'msg'=>$message,
                'data'=>$data,
                'timestamp'=>time()
            ];
            return json($content);
        }
    }
    

    ApiErrCode.php 是错误码类 

    在开发过程 ,基础的判断是少不了的,不能相信来自用户的输入,当数据或者参数异常时,需要返回指定状态,告诉用户出了什么问题。

    但是一个项目会有很多不同的错误码 ,规整到一起,方便管理。

    namespace appcommon;
    /**
     * 错误码类
     * @user yiqiu
     * @email 529857614@qq.com
     * @date 2021/2/19 20:01
     * @blog http://www.upwqy.com
     */
    class ApiErrCode{
        /**
         *  通用错误
         * code < 1000
         */
        const success = ['code'=>200,'msg'=>'成功'];
        const invalid_params = ['code'=>204,'msg'=>'参数错误'];
        const unknown_err = ['code'=>500,'msg'=>'未知错误'];
        const login_invalid = ['code'=>40001,'msg'=>'请重新登录。'];   

    在需要使用的地方

    use JsonResponse;
    public function getList(){
      return $this->jsonSuccessData($result)
    }

    ThinkPHP6 

    在异常处理类中 增加JsonResponse返回,自定义返回结构

    namespace app;
    
    use appcommonApiErrCode;
    use appcommonexceptionBaseException;
    use appcommon
    esponseJsonResponse;
    use thinkdbexceptionDataNotFoundException;
    use thinkdbexceptionModelNotFoundException;
    use thinkexceptionHandle;
    use thinkexceptionHttpException;
    use thinkexceptionHttpResponseException;
    use thinkexceptionValidateException;
    use thinkResponse;
    use Throwable;
    
    /**
     * 应用异常处理类
     */
    class ExceptionHandle extends Handle
    {
        use JsonResponse;
        /**
         * 不需要记录信息(日志)的异常类列表
         * @var array
         */
        protected $ignoreReport = [
            HttpException::class,
            HttpResponseException::class,
            ModelNotFoundException::class,
            DataNotFoundException::class,
            ValidateException::class,
        ];
    
        /**
         * 记录异常信息(包括日志或者其它方式记录)
         *
         * @access public
         * @param  Throwable $exception
         * @return void
         *
         */
        public function report(Throwable $exception): void
        {
            // 使用内置的方式记录异常日志
            parent::report($exception);
        }
    
        /**
         * Render an exception into an HTTP response.
         * @access public
         * @param 	hinkRequest   $request
         * @param Throwable $e
         * @return Response
         */
        public function render($request, Throwable $e): Response
        {
            // 其他错误交给系统处理
    //        return parent::render($request, $e);
            // 添加自定义异常处理机制
    
           if($e instanceof BaseException){
               $code = $e->getCode();
               $message = $e->getMessage();
           }else{
    
               $code = $e->getCode();
               if(!$code || $code < 0){
                   $code = ApiErrCode::unknown_err['code'];
               }
               $message = $e->getMessage() ? : ApiErrCode::unknown_err['msg'];
           }
    
            return $this->jsonData($code,$message);
    
        }
    }
    

    ThinkPHP5 中 应用异常处理类 需要手动创建 

    全局异常捕获 可以参考 http://www.upwqy.com/details/273.html

  • 相关阅读:
    hdu 5326
    校内的没落
    LA 4728 Square ,旋转卡壳法求多边形的直径
    Codeforces Round #256 (Div. 2/A)/Codeforces448A_Rewards(水题)
    【华为OJ平台练习题】求最大公共子串的个数和元素
    CI框架入门中的简单MVC样例
    POJ 1651 Multiplication Puzzle (区间DP)
    IOS开发-提升app性能的25条建议和技巧
    学生信息管理系统-错误‘3021’
    Cloudera Manager和CDH5.8离线安装
  • 原文地址:https://www.cnblogs.com/wqy415/p/8867737.html
Copyright © 2020-2023  润新知