api laravel 统一返回方法_Laravel-自定义API返回的JSON格式
按照我司规范,服务器处理http请求后返回的JSON,应该是这样的格式:
{
code:
data:
msg:
}
这就需要对Laravel框架默认的返回值(太随意了,缺少一个统一的结构来包装返回值)做一些处理,具体包括以下几个部分:
(一)使用LaravelResponse Macro机制来自Controller的直接返回
需要进行以下几步操作:
1、创建一个ServiceProvider
php artisan make:provider ResponseMacroServiceProvider
namespace App\Providers;
useIlluminate\Support\ServiceProvider;
useIlluminate\Support\Facades\Response;
class ResponseMacroServiceProvider extendsServiceProvider
{
public functionboot()
{
Response::macro('horesp', function ($code=2000, $data=null, $msg=null) {
$content = array(
'code' => $code,
'data' => $data,
'msg' => $msg);
return response()->json($content);
});
}
public functionregister()
{
//
}
}
2、在config/app.php文件中的‘providers’列表中,增加下面的一行
App\Providers\ResponseMacroServiceProvider::class,
3、创建一个HOBaseController,以后所有的Controller都继承这个类
php artisan make:controller HOBaseController
namespace App\Http\Controllers;
useApp\Http\Controllers\Controller;
class HOBaseController extendsController
{
//这个方法只应该在接口顺利完成了对请求业务的处理之后调用
public function response($data=null, $msg=null)
{
return response()->horesp(2000, $data, $msg);
}
}
4、以后在controller类里面直接返回结果时,使用这个方式
return $this->response($user->name);
(二)对主动返回的错误值做处理
原理是通过主动抛出异常,来处理所有需要返回错误代码和错误信息的情况,由框架的异常处理机制来构造最终的返回值。
1、创建一个HOException类
php artisan make:exception HOException
2、在App\Exception文件夹中,创建一个HOError.php文件,对每一个错误,都定义一个方法,供外部调用。
namespace App\Exceptions;
use \App\Exceptions\HOException asHOException;
classHOError
{
public functiongeneralErr()
{
throw new HOException('General Error Occurred', 2001);
}
}
3、在HOBaseController里面,增加如下代码
protected $error;
public functionerror()
{
$this->error = newHOError();
return $this->error;
}
4、在App/Exeption/Handler.php文件中,重写render方法
use Illuminate\Support\Facades\Log;
use \App\Exceptions\HOException asHOException;
useIlluminate\Http\Exceptions\HttpResponseException;
public function render($request, Exception $exception)
{
//对详细的错误信息,进行记录,但是不返回给前端
Log::debug( parent::render($request, $exception) );
if ( $exceptioninstanceof HOException ) {
$msg = $exception->getMessage();
}else{
$msg = 'Server Bad';
}
return response()->horesp( $exception->getCode(), null, $msg);
}
5、在Controller的方法里,可以这样来返回错误码和错误信息
return $this->error()->generalErr();
(三) 对Validate不通过的情况做处理
创建一个HOFormRequest类,继承FormRequest类,以后创建FormRequest,都从HOFormRequest类去集成. 解决方案来自:https://www.jianshu.com/p/658f979abfb7
namespace App\Http\Requests;
useIlluminate\Foundation\Http\FormRequest;
use App\Exceptions\HOException asHOException;
use Illuminate\Contracts\Validation\Validator asValidator;
class HOFormRequest extendsFormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public functionauthorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public functionrules()
{
return[
//
];
}
protected function failedValidation(Validator $validator)
{
$message = $validator->errors()->all();
throw new HOException(implode($message), 3000);
}
}
(四)对Authenticate不通过情况的处理
1、创建一个unauthenticated路由,在对应的controller方法中返回标准格式的错误信息和字符串给客户端。
Route::post('/user/unauthenticated', 'Api\UserController@unauthenticated')->name('unauthenticated');
2、修改app\middleware\authenticate.php中间件的redirectTo方法
protected function redirectTo($request){return route('unauthenticated');
}
api laravel 统一返回方法_Laravel-自定义API返回的JSON格式相关推荐
- api laravel 统一返回方法_你写的API接口代码真的烂,难道不能对返回格式统一处理一下吗?...
随着互联网各岗位精细化分工的普及,出现了很多的系统架构设计,比如常见的前后端分离架构,后端提供接口给前端,前端根据接口的数据进行渲染,大家各执其职,效率也非常的高,但是随着接口的增加,如果不统一的规范 ...
- 使用Java对返回的结果,封装成指定JSON格式的数据类型
1.如果任务下来了,并且给定了你指定格式的JSON数据类型,那么就要想法封装成此种JSON格式的数据类型,方便其他成员进行调用,那么是如何进行封装的呢,这里简单研究一下子. 2.如果文档指定的封装类型 ...
- api laravel 统一返回方法_Laravel API 错误处理:当异常时,如何返回消息
image 基于 API 的项目开发越来越受欢迎,并且使用 Laravel 就能很容易实现.但是在针对如何处理各种异常的话题很少被提及.所以 API 的使用者们经常会抱怨除了收到 Server err ...
- Spring boot 少量字段不使用对象接收 自定义注解转成JSON格式
一 自定义注解 /*** @author qujiawen* @version 1.0.0* @ClassName RequestJson.java* @Description TODO* @crea ...
- Spring Boot 无侵入式 实现 API 接口统一 JSON 格式返回
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 无侵入式 统一返回JSON格式 其实本没有没打算写这篇博客 ...
- Spring Boot 无侵入式 实现API接口统一JSON格式返回
作者 | 小魏小魏我们去那里呀 来源 | blog.csdn.net/qq_34347620/article/details/102239179 无侵入式 统一返回JSON格式 其实本没有没打算写这篇 ...
- axios二次封装以及API接口统一管理
前端向服务器发送请求,使用的方法有很多: XMLHttpRequest.fetch.JQ.axios 1.axios二次封装 二次封装axios是为了请求拦截器.响应拦截器. 请求拦截器:可以在发送请 ...
- Flask 学习-6. jsonify()返回JSON格式数据
前言 JSON 格式的响应是常见的,用 Flask 写这样的 API 是很容易上手的.如果从视图 返回一个 dict ,那么它会被转换为一个 JSON 响应. 返回JSON 格式 如果从视图 返回一个 ...
- ajax请求web服务返回json格式
由于.net frameword3.5以上添加了对contenttype的检查,当ajax发送请求时,如果设置了contenttype为json,那么请求webservice时,会自动将返回的内容转为 ...
最新文章
- 16年寒假随笔(2)
- tpcc-mysql的使用
- 偏差、方差、欠拟合、过拟合、学习曲线
- python常考题_Python语言基础考察点:python语言基础常见考题(一)
- 我国最早超级计算机,全球十大超级计算机将在沪开通
- 动规(LIS)-POJ-2533
- python barh_Python matplotlib.axes.Axes.barh()用法及代码示例
- SQL_drop删除表、数据库
- tcc-transation源码分析与思考
- Leetcode 76.最小覆盖子串
- Sunshine 项目构思
- java 微信给好友发信息吗,不在线,好友发给我的微信消息,会不会丢?
- 【JZOJ 5405】【NOIP2017提高A组模拟10.10】Permutation
- Windows下命令行怎样登录MySQL
- 川大计算机考研失败经历,失败过,又成功了 川大传播学两年考研经验分享
- java第三方包_java第三方包学习之lombok
- IntentFilter简述
- 一个mac地址对应多个ip_子接口的配置(一个网卡配置多个ip地址)
- 小议:C++ 二维数组的声明与申请空间
- 聊聊数据分析中常问的估算问题,有方法论吗?
热门文章
- 【kafka】kafka jmx topic 监控 topic 名称不存在 或者 topic监控是如何出现的呢 或者 topic监控机制
- 【elasticsearch】block.ClusterBlockException: blocked by: SERVICE_UNAVAILA
- 【Kafka】Kafka 奇怪问题之无法用Java 客户端消费
- fastjson字符串json转对象(父类转子类)
- Flink:Container is running beyond virtual memory limits
- 95-230-028-源码-WordCount走读-获取ExecutionGraph
- Spring : 异步注解 @EnableAsync 和 @Async
- Linux重器 vi编辑器
- 一个项目三个坑,我懵了
- Spring 为啥默认把bean设计成单例的?这篇讲的明明白白的