20210602 修正

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

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

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

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

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

JsonResponse.php 文件

namespace app\common\response;
use app\common\ApiErrCode; use think\facade\Log; /**
* Trait JsonResponse
* @package app\http\response
*/
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 app\common;
/**
* 错误码类
* @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 app\common\ApiErrCode;
use app\common\exception\BaseException;
use app\common\response\JsonResponse;
use think\db\exception\DataNotFoundException;
use think\db\exception\ModelNotFoundException;
use think\exception\Handle;
use think\exception\HttpException;
use think\exception\HttpResponseException;
use think\exception\ValidateException;
use think\Response;
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 \think\Request $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

thinkphp api接口 统一结果返回处理类的更多相关文章

  1. Java接口统一样式返回模板

    Java接口统一样式返回模板 背景 在进行接口开发时,一般需要一个固定的返回样式,成功和失败的时候,都按照这种格式来进行统一的返回,这样,在与其他人进行接口之间的联调时不会显得很杂乱无章.而这种固定的 ...

  2. Spring Boot 无侵入式 实现RESTful API接口统一JSON格式返回

    前言 现在我们做项目基本上中大型项目都是选择前后端分离,前后端分离已经成了一个趋势了,所以总这样·我们就要和前端约定统一的api 接口返回json 格式, 这样我们需要封装一个统一通用全局 模版api ...

  3. api接口统一封装

    具体的接口api模块,例如authorization.js import axios from '../axiosWrapper' let prefix = process.env.API_ROOT ...

  4. web api写api接口时返回

    web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...

  5. Web API接口 安全验证

    在上篇随笔<Web API应用架构设计分析(1)>,我对Web API的各种应用架构进行了概括性的分析和设计,Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端 ...

  6. 年轻人不讲武德,竟然重构出这么优雅后台 API 接口

    Hello,早上好,我是楼下小黑哥~ 最近偶然间在看到 Spring 官方文档的时候,新学到一个注解 @ControllerAdvice,并且成功使用这个注解重构我们项目的对外 API 接口,去除繁琐 ...

  7. vue中Axios的封装和API接口的管理

    前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习.如果对原博主造成侵犯,我会立即删除. 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题 ...

  8. Django项目:CMDB(服务器硬件资产自动采集系统)--03--03CMDB信息安全API接口交互认证

    #settings.py """ Django settings for AutoCmdb project. Generated by 'django-admin sta ...

  9. Django项目:CMDB(服务器硬件资产自动采集系统)--02--02CMDB将服务器基本信息提交到API接口

    AutoCmdb # urls.py """AutoCmdb URL Configuration The `urlpatterns` list routes URLs t ...

随机推荐

  1. 西门子PLC开发笔记(一):PLC介绍,西门子S1200系列接线、编程、下载和仿真

    前言   西门西PLC.台达触摸屏.法兰克机床等等多年以前玩得比较多,改造机床.维修机床.给机床编程等等,没事还能扯个零件啥的,之前也没总结过,有时间就重新整理下.  本章后面以西门1200实物为例, ...

  2. day17.网络编程2+进程

    1 加入链接循环的套接字服务端 1.1 服务端 ''' 2.1 基于文件类型的套接字家族 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套 ...

  3. 3年经验硬抗字节Java岗,25天4轮面试终拿意向书,复述原题及经验

    这次面试字节跳动也是做了很多的准备,还好顺利拿到了offer,特分享一下这次的4面技术面真题,以及一份字节2-2师兄整理的面试手册,希望能够给一些正在面试字节或计划面试大厂的朋友提供帮助. 字节跳动技 ...

  4. logstash收集springboot日志

    logstash收集springboot日志 maven依赖 <dependency> <groupId>net.logstash.logback</groupId> ...

  5. Weblogic CVE-2020-2551漏洞复现

    Weblogic CVE-2020-2551漏洞复现 0x00 前言 在一次渗透测试过程中,碰见了该漏洞,并使用在野的POC验证了这个漏洞存在,当时工具网传的利用方式去进行利用,没有成功,可能是自己太 ...

  6. 《机器学习Python实现_10_02_集成学习_boosting_adaboost分类器实现》

    一.简介 adaboost是一种boosting方法,它的要点包括如下两方面: 1.模型生成 每一个基分类器会基于上一轮分类器在训练集上的表现,对样本做权重调整,使得错分样本的权重增加,正确分类的样本 ...

  7. 用C/C++手撕CPlus语言的集成开发环境(1)—— 语言规范 + 词法分析器

    序言 之所以叫做CPlus语言,是因为原本是想起名为CMinus的,结果发现GitHub和Gitee上一堆的CMinus的编译器(想必都是开过编译原理课程并且写了个玩具级的语言编译器的大佬们吧).但是 ...

  8. 【MySQL】SQL中On和Where的区别

    数据库再通过链接两张表或者多张表时来返回记录时,都会生成一张中间的临时表,然后再将这张表返回给用户: 在使用left jion时,on和where条件的区别如下: 1. on条件是在生成临时表时使用的 ...

  9. Iptables防火墙实验

    先说明一下环境,这里有四台主机,中间的Centos充当防火墙.右上角的win XP和右下角的Rhel7充当服务器,最左边的win7充当主机.四者之间的网卡都已经配置好.而且我们已经在Centos6.5 ...

  10. Cookie、Session和Token认证

    目录 Cookie Session认证机制 Session的一些安全配置 Token认证机制 Token预防CSRF Session认证和Token认证的区别 前言:HTTP是一种无状态的协议,为了分 ...