本文目录导读:

在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项目,推荐使用第一种或第四种方式。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播