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);
}
}
推荐:github.com/jiannei/laravel-respons...
正在用 Vue SPA + Laravel 后端开发 CMS,所以我的应用场景比较简单,目前的打算是:
我不喜欢出错了还返回 2xx 状态码,感觉会被误导,放着现成的机制不用。
用TP的fast会用code,用laravel一开始能力不够不会自己封装后来也懒得封装了
以前会自己设计封装,现在懒得搞了,网上一堆包,composer安装开箱即用。 :sweat_smile:
吃过 HTTP 状态码 不规范的亏,比如三方服务与你沟通的场景。我当时碰到的事
laravel-echo-server
人家开源的服务提供基于websocket
的广播服务。结果人家要通过客户端发起订阅私有频道过来获取授权,token
授权失败时返回的还是 200 状态,websocket
的服务和前端都看不出来是失败的,自然也不会提醒用户授权已经失效了。只需要保留 success 和 error 就可以了