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版本信息帮助客户端升级。
PHPAPI响应格式与状态码规范
张小明
前端开发工程师
neuralangelo记录
前言 提心吊胆地跑nerualangelo,不仅是因为github上的tnt出问题的人太多了,还担心motivation验证不出来吧。 training config # 修改数据集目录 root: datasets/tanks_and_temples/Truck num_images: 251 # The number of training images.mesh extracti…
生产级机器学习模型的七道生死关:从部署到韧性落地
1. 项目概述:当模型走出笔记本,真正开始“呼吸”现实世界你有没有经历过这样的场景?花了三个月时间调参、优化、交叉验证,AUC冲到0.92,团队在评审会上掌声雷动,PM当场拍板“下周上线”。你松了口气…
从Notebook到生产:机器学习模型服务化七步实战
1. 项目概述:这不是一次模型训练,而是一场工程交付“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题里藏着太多被新手忽略的潜台词。它不是在讲怎么调参、怎么画ROC曲线,也不是教你怎么用sklearn.pipeli…
BERT表征模型与GPT生成模型在文本分类中的范式选择
1. 项目概述:当文本分类不再只是“打标签”,而是一场模型思维的切换我带过三届NLP方向的实习生,每次布置第一个实战任务——“用BERT做情感分析”,总有一半人卡在第三步:为什么微调时只训练分类头,不碰BERT…
异构迁移双雄记:Oracle和SQL Server换“心”的那些坑
关键词:Oracle迁移;SQL Server迁移;异构迁移;语法兼容;金仓数据库大家好,我是小耶,写功课只是为了我踩过的坑,你们别再踩了! 这几年信创项目多了,我接触的…
如何快速配置炉石传说终极模改插件:完整安装与使用指南
如何快速配置炉石传说终极模改插件:完整安装与使用指南 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 炉石传说模改插件HsMod是一款基于BepInEx框架开发的专业游戏优化工具&am…