3.2. 统一接口返回值处理
简要说明
通过查阅资料,并且结合前后端对接习惯来看,我们希望,api的返回信息应该包含以下四个信息:
- status 状态信息「成功或失败」
- code http状态码
- message 提示信息
- data 返回数据信息
下面的内容也将按照此格式进行编写。
创建 ApiResponse.php 文件
在 app/API/Helpers
目录 (不存在目录自己新建) 下新建 ApiResponse.php
填入内容如下:
<?php
namespace App\API\Helpers;
use Symfony\Component\HttpFoundation\Response as FoundationResponse;
trait ApiResponse
{
/**
* 拦截http状态码
* @var int
*/
protected $statusCode = FoundationResponse::HTTP_OK;
/**
* @return mixed
*/
public function getStatusCode()
{
return $this->statusCode;
}
/**
* @param $statusCode
* @return $this
*/
public function setStatusCode($statusCode,$httpCode=null)
{
$httpCode = $httpCode ?? $statusCode;
$this->statusCode = $statusCode;
return $this;
}
/**
* @param $data
* @param string $status
* @param $code
* @return mixed
*/
public function success($data,$code=null,$status = "success"){
return $this->status($status,compact('data'),$code);
}
/**
* @param $status
* @param array $data
* @param null $code
* @return mixed
*/
public function status($status, array $data, $code = null){
if ($code){
$this->setStatusCode($code);
}
$status = [
'status' => $status,
'code' => $this->statusCode,
];
$data = array_merge($status,$data);
return response()->json($data);
}
/**
* @param $message
* @param int $code
* @param string $status
* @return mixed
*/
public function error(string $message, $code = FoundationResponse::HTTP_BAD_REQUEST,$status = 'error'){
return $this->setStatusCode($code)->message($message,$status);
}
/**
* @param $message
* @param string $status
* @return mixed
*/
public function message($message, $status = "success"){
return $this->status($status,[
'message' => $message
]);
}
/**
* @param string $message
* @return mixed
*/
public function notFound($message = 'Not Found!')
{
return $this->error($message,Foundationresponse::HTTP_NOT_FOUND);
}
}
新建 Api 基类
在 app/Http/Controller/Api
目录下新建一个 Controller.php
作为 Api
专门的基类
.
填入内容如下:
<?php
namespace App\Http\Controllers\Api;
use App\API\Helpers\ApiResponse;
use App\Http\Controllers\Controller as BaseController;
class Controller extends BaseController
{
use ApiResponse;
// 其他通用的Api帮助函数
}
注意:其他 Api 控制器应该继承基类控制器
如何使用
得益于前面统一消息的封装,使用起来非常容易。
1. 返回正确信息
return $this->success('用户登录成功...');
2. 返回正确资源信息
return $this->success($user);
3. 返回自定义 http 状态码的正确信息
return $this->success('用户登录成功...',401);
4. 返回错误信息
return $this->error('用户注册失败');
5. 返回自定义 http 状态码的错误信息
return $this->error('用户登录失败',401);
6. 返回自定义 http 状态码的错误信息,同时也想返回自己内部定义的错误码
return $this->error('用户登录失败',401,10001);
7. 返回404
return $this->notFound();
默认 success 返回的状态码是 200,error 返回的状态码是 400
推荐文章: