php - Laravel 5.5+ API 异常处理 (JSON) - 最好的方法是什么?
问题描述
我一天中的大部分时间都在寻找一些额外的信息、指南和建议,但到目前为止它非常有限。我正在创建一个带有护照的 Laravel 5.6 API,需要实现一些强大的异常处理。
到目前为止,我已将异常处理程序类编辑为以下内容:
if ($request->wantsJson()) {
//model not found
if ($exception instanceof ModelNotFoundException) {
return response()->json(
[
'errors' => [
'status' => 404,
'title' => 'Resource not found',
'detail' => $exception->getMessage()
]
],
404);
}
}
这会按预期将 JSON 错误发送回用户。我还包括了未找到模型、未找到页面、缺少 API 范围的捕获,最后是其他任何东西的后备。
对于我知道最终用户可能存在输入错误的代码区域,我已经实现了尝试捕获,我可以在其中将错误消息转换为更用户友好的内容,重新抛出它,然后将其发送回用户上面的代码。
try{
$to = new Carbon(request('created_to'));
} catch (\Exception $e){
throw new \Exception('Date time could not be parsed into recognised format.', 400, $e);
}
我还没有实现任何请求/表单验证异常,但希望这与使用 Laravel 消息包功能类似。
我在这里有一些可用的东西,但很想知道你的想法,如果有人有任何建议、指南链接或其他提示,他们可以分享以使其变得更好。当然,如果一切都错了,我很乐意重新开始!我觉得必须有一些开发良好的库或我缺少的框架原生的东西。
编辑
我发现的一些资源:
确保始终响应 json 的中间件- 如果Accept: application/json
不包含在标头中,则用户将返回 html。该中间件将此标头添加到所有 HTML 请求中。
Dingo API - 这个包似乎曾经是所有 Laravel API 的 goto。然而,由于更新的版本似乎很多都是多余的。它可能仍然有可用的元素,但似乎有许多与 5.5+ 一起使用的问题/错误。
专注于 heimdal 错误处理程序的博客文章- 这是我发现的最接近专用 API 异常处理程序包的文章。再次它很旧,并且有一段时间没有更新。
解决方案
推荐阅读
- java - Java - 将一个文件中的内容逐块(例如 8 字节)交替写入多个文件
- manageiq - ManageIQ为Windows系统配置静态IP
- c - 如何在 C 中的 DO-WHILE 循环中添加多个参数
- java - 套接字,连接和断开
- amazon-web-services - ECS 中的 Fargate 任务无法使用 ECR 接口端点从 ECR 存储库中提取映像
- ios - Xamarin iOS - 为什么 Transporter 找不到我的图标?
- selenium - 我需要在离线模式下运行standalone-chrome-debug
- c++ - 使用 CreateProcess() 的唯一配置文件的多个浏览器实例未提供预期输出
- javascript - 意外的令牌,预期的“,”在本机博览会中
- excel - Excel中的高级日期过滤器