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);
    }
}
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 19
Mutoulee
1年前 评论
Jianne 1年前
Mutoulee (作者) 1年前
ben1024 1年前
slowlyo 1年前
深蓝色 (楼主) 1年前
xujinhui 1年前
Jianne 1年前
深蓝色 (楼主) 1年前
Jianne 1年前
深蓝色 (楼主) 1年前

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

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

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

1年前 评论

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

1年前 评论

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

1年前 评论
sanders

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

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

1年前 评论
Imuyu 1年前
33qis 1年前
laradocs

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

1年前 评论

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