使用 Laravel 构建规范的 REST API
Laravel 提供了快速开发 API 的完整组件,但规范仍需要团队主动建立。控制器负责 HTTP 协议,Form Request 负责输入校验,策略负责授权,服务层处理业务事务,Resource 负责稳定输出。
核心原则
- 按 API 版本和资源组织路由,使用 apiResource 保持 REST 方法一致。
- 把校验规则放进 Form Request,并为业务冲突返回可识别错误码。
- 用 Policy 或 Gate 处理资源级授权,不在控制器中散落角色判断。
- 通过 API Resource 明确公开字段、关联和分页结构。
- 对创建、更新等多步操作使用事务,并为幂等场景设计唯一键。
推荐的实践步骤
控制器接收已经校验的请求数据,调用服务完成写入,然后返回 Resource 和明确状态码。列表接口限制每页大小并按需加载关联,避免 N+1 查询。Feature Test 覆盖身份认证、权限、校验失败、成功响应和数据库状态,确保接口契约在重构后保持稳定。
public function store(StoreUserRequest $request): JsonResponse
{
$user = $this->service->create(
$request->validated()
);
return (new UserResource($user))
->response()
->setStatusCode(201);
}
示例用于说明实现思路,实际项目还应结合所使用的框架版本、部署环境和业务约束进行调整。重要配置要进入版本管理,并在测试环境验证后再发布。
常见误区
- 控制器同时承担校验、授权、事务和模型更新,会快速变得难以测试。
- 列表接口直接返回全部记录,容易造成慢查询和超大响应。
- Resource 中访问未预加载的关联,会在序列化阶段触发 N+1 查询。
上线前检查清单
- 确认“按 API 版本和资源组织路由,使用 apiResource 保持 REST 方法一致”已经通过代码审查或运行验证。
- 确认“把校验规则放进 Form Request,并为业务冲突返回可识别错误码”已经通过代码审查或运行验证。
- 确认“用 Policy 或 Gate 处理资源级授权,不在控制器中散落角色判断”已经通过代码审查或运行验证。
- 确认“通过 API Resource 明确公开字段、关联和分页结构”已经通过代码审查或运行验证。
- 为失败路径、边界条件和回滚方案准备测试或演练记录。
- 上线后观察错误率、延迟和资源消耗,确认变化符合预期。
总结
使用 Laravel 构建规范的 REST API的关键在于把隐含假设变成可执行的约束,并通过测试、监控和复盘持续验证。先从影响最大的真实场景开始,小步调整并保留回滚能力,通常比一次性大范围改造更安全,也更容易积累可复用的工程经验。