news 2026/6/19 17:28:15

PHPAPI响应格式与状态码规范

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHPAPI响应格式与状态码规范

PHPAPI响应格式与状态码规范

统一的API响应格式让前后端协作更高效。规范的HTTP状态码让错误处理更清晰。今天说说PHP中API响应格式和状态码的使用。

统一的JSON响应格式。

```php
class ApiResponse
{
public static function success(mixed $data = null, string $message = 'success'): string
{
return json_encode([
'code' => 0,
'message' => $message,
'data' => $data,
], JSON_UNESCAPED_UNICODE);
}

public static function error(string $message, int $code = -1, mixed $data = null): string
{
return json_encode([
'code' => $code,
'message' => $message,
'data' => $data,
], JSON_UNESCAPED_UNICODE);
}

public static function paginate(array $items, int $total, int $page, int $perPage): string
{
return json_encode([
'code' => 0,
'message' => 'success',
'data' => [
'items' => $items,
'total' => $total,
'page' => $page,
'per_page' => $perPage,
'total_pages' => ceil($total / $perPage),
],
], JSON_UNESCAPED_UNICODE);
}

public static function send(mixed $data, int $statusCode = 200): void
{
http_response_code($statusCode);
header('Content-Type: application/json; charset=utf-8');
echo is_string($data) ? $data : json_encode($data, JSON_UNESCAPED_UNICODE);
}
}
?>

HTTP状态码的正确使用。

```php
// 2xx 成功
200 => 'OK',
201 => 'Created',
204 => 'No Content',

// 3xx 重定向
301 => 'Moved Permanently',
302 => 'Found',
304 => 'Not Modified',

// 4xx 客户端错误
400 => 'Bad Request',
401 => 'Unauthorized',
403 => 'Forbidden',
404 => 'Not Found',
405 => 'Method Not Allowed',
409 => 'Conflict',
422 => 'Unprocessable Entity',
429 => 'Too Many Requests',

// 5xx 服务端错误
500 => 'Internal Server Error',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
?>

API错误处理。

```php
class ApiException extends Exception
{
public function __construct(
string $message,
int $code = 400,
private ?array $details = null
) {
parent::__construct($message, $code);
}

public function getDetails(): ?array
{
return $this->details;
}

public function toResponse(): array
{
$response = [
'error' => true,
'message' => $this->getMessage(),
'code' => $this->getCode(),
];

if ($this->details) {
$response['details'] = $this->details;
}

return $response;
}
}

set_exception_handler(function (Throwable $e) {
if ($e instanceof ApiException) {
http_response_code($e->getCode());
echo json_encode($e->toResponse(), JSON_UNESCAPED_UNICODE);
} else {
http_response_code(500);
echo json_encode([
'error' => true,
'message' => $_SERVER['APP_ENV'] === 'development' ? $e->getMessage() : '服务器内部错误',
], JSON_UNESCAPED_UNICODE);

error_log("API错误: {$e->getMessage()} in {$e->getFile()}:{$e->getLine()}");
}
});
?>

API版本信息。

```php
function addApiVersionHeaders(): void
{
header('X-API-Version: 2.0');
header('X-API-Deprecated: true');
header('X-API-Sunset-Date: 2024-12-31');
}
?>

分页信息的响应。

```php
function paginatedResponse(PDO $pdo, string $sql, int $page, int $perPage): string
{
$offset = ($page - 1) * $perPage;
$countSql = "SELECT COUNT(*) FROM (" . $sql . ") AS count";
$total = (int)$pdo->query($countSql)->fetchColumn();

$stmt = $pdo->prepare("$sql LIMIT $perPage OFFSET $offset");
$stmt->execute();
$items = $stmt->fetchAll();

return ApiResponse::paginate($items, $total, $page, $perPage);
}
?>

统一的API响应格式让前端错误处理更简单。code字段区分业务错误,message字段给出描述。HTTP状态码反映请求结果。分页信息包含总数和总页数。API版本信息帮助客户端升级。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/19 17:25:10

neuralangelo记录

前言 提心吊胆地跑nerualangelo,不仅是因为github上的tnt出问题的人太多了,还担心motivation验证不出来吧。 training config # 修改数据集目录 root: datasets/tanks_and_temples/Truck num_images: 251 # The number of training images.mesh extracti…

作者头像 李华
网站建设 2026/6/6 5:31:53

生产级机器学习模型的七道生死关:从部署到韧性落地

1. 项目概述:当模型走出笔记本,真正开始“呼吸”现实世界你有没有经历过这样的场景?花了三个月时间调参、优化、交叉验证,AUC冲到0.92,团队在评审会上掌声雷动,PM当场拍板“下周上线”。你松了口气&#xf…

作者头像 李华
网站建设 2026/6/6 5:31:42

从Notebook到生产:机器学习模型服务化七步实战

1. 项目概述:这不是一次模型训练,而是一场工程交付“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题里藏着太多被新手忽略的潜台词。它不是在讲怎么调参、怎么画ROC曲线,也不是教你怎么用sklearn.pipeli…

作者头像 李华
网站建设 2026/6/6 5:31:32

BERT表征模型与GPT生成模型在文本分类中的范式选择

1. 项目概述:当文本分类不再只是“打标签”,而是一场模型思维的切换我带过三届NLP方向的实习生,每次布置第一个实战任务——“用BERT做情感分析”,总有一半人卡在第三步:为什么微调时只训练分类头,不碰BERT…

作者头像 李华
网站建设 2026/6/6 5:31:21

异构迁移双雄记:Oracle和SQL Server换“心”的那些坑

​关键词​:Oracle迁移;SQL Server迁移;异构迁移;语法兼容;金仓数据库大家好,我是小耶,写功课只是为了我踩过的坑,你们别再踩了! 这几年信创项目多了,我接触的…

作者头像 李华
网站建设 2026/6/6 5:29:25

如何快速配置炉石传说终极模改插件:完整安装与使用指南

如何快速配置炉石传说终极模改插件:完整安装与使用指南 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 炉石传说模改插件HsMod是一款基于BepInEx框架开发的专业游戏优化工具&am…

作者头像 李华