本文目录导读:

在PHP中封装API成功响应通常有几种常见做法,我来给你介绍几种标准的封装方式:
基础封装(推荐)
<?php
class ApiResponse {
/**
* 成功响应
* @param mixed $data 返回数据
* @param string $message 提示信息
* @param int $code 状态码
*/
public static function success($data = null, $message = '操作成功', $code = 200) {
$result = [
'code' => $code,
'message' => $message,
'data' => $data,
'timestamp' => time()
];
return response()->json($result, $code);
}
/**
* 错误响应
* @param string $message 错误信息
* @param int $code 状态码
* @param mixed $data 附加数据
*/
public static function error($message = '操作失败', $code = 400, $data = null) {
$result = [
'code' => $code,
'message' => $message,
'data' => $data,
'timestamp' => time()
];
return response()->json($result, $code);
}
}
// 使用示例
class UserController extends Controller {
public function getUser($id) {
$user = User::find($id);
if (!$user) {
return ApiResponse::error('用户不存在', 404);
}
return ApiResponse::success($user, '查询成功');
}
}
直接使用JSON返回
<?php
// 简单的响应函数
function apiSuccess($data = [], $message = 'success', $code = 200) {
header('Content-Type: application/json; charset=utf-8');
http_response_code($code);
echo json_encode([
'code' => $code,
'message' => $message,
'data' => $data,
'timestamp' => time()
]);
exit;
}
function apiError($message = 'error', $code = 400, $data = []) {
header('Content-Type: application/json; charset=utf-8');
http_response_code($code);
echo json_encode([
'code' => $code,
'message' => $message,
'data' => $data,
'timestamp' => time()
]);
exit;
}
// 使用
apiSuccess($userData, '获取成功');
apiError('参数错误', 422);
面向对象的封装
<?php
namespace App\Helpers;
class ApiResponse {
private $data;
private $message;
private $code;
private $status;
public function __construct() {
$this->data = null;
$this->message = '';
$this->code = 200;
$this->status = true;
}
public function setData($data) {
$this->data = $data;
return $this;
}
public function setMessage($message) {
$this->message = $message;
return $this;
}
public function setCode($code) {
$this->code = $code;
return $this;
}
public function success() {
$this->status = true;
$this->code = 200;
return $this->toJson();
}
public function error($message = '', $code = 400) {
$this->status = false;
$this->message = $message ?: '操作失败';
$this->code = $code;
return $this->toJson();
}
private function toJson() {
return response()->json([
'success' => $this->status,
'code' => $this->code,
'message' => $this->message,
'data' => $this->data,
'timestamp' => time()
], $this->code);
}
}
// 使用
$response = new ApiResponse();
$response->setData($data)
->setMessage('登录成功')
->success();
带分页的响应(Laravel)
<?php
trait ApiResponseTrait {
public function success($data, $message = '操作成功') {
return response()->json([
'code' => 200,
'message' => $message,
'data' => $data
]);
}
public function successWithPaginate($data, $message = '查询成功') {
return response()->json([
'code' => 200,
'message' => $message,
'data' => $data->items(),
'meta' => [
'current_page' => $data->currentPage(),
'last_page' => $data->lastPage(),
'per_page' => $data->perPage(),
'total' => $data->total()
]
]);
}
}
// Controller中使用
class ArticleController extends Controller {
use ApiResponseTrait;
public function index() {
$articles = Article::paginate(10);
return $this->successWithPaginate($articles);
}
public function store(Request $request) {
$article = Article::create($request->all());
return $this->success($article, '创建成功');
}
}
推荐的响应格式
{
"code": 200,
"message": "操作成功",
"data": {
"id": 1,
"name": "张三",
"email": "zhangsan@example.com"
},
"timestamp": 1645567890
}
最佳实践建议
- 统一响应格式:整个项目中保持一致的响应结构
- 规范状态码:使用HTTP标准状态码
- 添加时间戳:便于客户端和调试
- 使用辅助方法:避免重复代码
- 考虑国际化:消息字段支持多语言
根据你的项目框架(原生PHP、Laravel、ThinkPHP等)选择合适的封装方式,如果是Laravel项目,推荐使用第一种或第四种方式。