api response 统一格式响应

你们在开发过程中是使用类似于这种解决方案也就是http200然后code为0,还是直接用Http状态码来区分的
大家讨论一下
不过感觉laravel内置的异常还有验证都不是用code还区分的

<?php

namespace App\Traits;

use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\JsonResource;

trait ApiResponse
{
    /**
     * @param  array  $data
     * @param  int  $status
     * @return JsonResponse
     */
    public function response(array $data, int $status = 200)
    {
        return response()->json($data, $status, [], JSON_UNESCAPED_UNICODE);
    }

    /**
     * @param  $data
     * @param  int  $code
     * @param  string  $message
     * @param  int  $status
     * @return JsonResponse
     */
    public function data($data, int $code = 1, string $message = 'success', int $status = 200)
    {
        return $this->response(compact('code', 'message', 'data'), $status);
    }

    /**
     * @param  JsonResource  $resource
     * @param  int  $code
     * @param  string  $message
     * @param  int  $status
     * @return JsonResponse
     */
    public function paginator(JsonResource $resource, int $code = 1, string $message = 'success', int $status = 200)
    {
        $resource = $resource->resource->toArray();
        $data = $resource['data'];
        $pagination = [
            'total' => $resource['total'],
        ];

        return $this->response(compact('code', 'message', 'data', 'pagination'), $status);
    }

    /**
     * @param  string  $message
     * @param  int  $code
     * @param  $data
     * @param  int  $status
     * @return JsonResponse
     */
    public function success(string $message = 'success', $data = [], int $code = 1, int $status = 200)
    {
        return $this->response(compact('code', 'message', 'data'), $status);
    }

    /**
     * @param  string  $message
     * @param  int  $code
     * @param  $data
     * @param  int  $status
     * @return JsonResponse
     */
    public function error(string $message = 'error', int $code = 0, $data = [], int $status = 200)
    {
        return $this->response(compact('code', 'message', 'data'), $status);
    }
}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 19
Mutoulee
3周前 评论
Jianne 3周前
Mutoulee (作者) 3周前
ben1024 3周前
slowlyo 3周前
深蓝色 (楼主) 3周前
xujinhui 3周前
Jianne 3周前
深蓝色 (楼主) 3周前
Jianne 3周前
深蓝色 (楼主) 3周前

正在用 Vue SPA + Laravel 后端开发 CMS,所以我的应用场景比较简单,目前的打算是:

  • 依赖 FormRequest 提供验证,它会使用恰当的 HTTP 错误码,并返回稳定的成功返回
  • 依赖 JsonResource 来封装数据,来提供固定的成功返回,这儿我就再不讲究了,直接用 200

我不喜欢出错了还返回 2xx 状态码,感觉会被误导,放着现成的机制不用。

3周前 评论

用TP的fast会用code,用laravel一开始能力不够不会自己封装后来也懒得封装了

3周前 评论

以前会自己设计封装,现在懒得搞了,网上一堆包,composer安装开箱即用。 :sweat_smile:

3周前 评论
sanders

垒码千万条 规范第一条 状态不规范 码农两行泪

吃过 HTTP 状态码 不规范的亏,比如三方服务与你沟通的场景。我当时碰到的事 laravel-echo-server 人家开源的服务提供基于 websocket 的广播服务。结果人家要通过客户端发起订阅私有频道过来获取授权,token 授权失败时返回的还是 200 状态,websocket 的服务和前端都看不出来是失败的,自然也不会提醒用户授权已经失效了。

3周前 评论
Imuyu 3周前
33qis 3周前
laradocs

只需要保留 success 和 error 就可以了

3周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!