首页 > 解决方案 > 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 异常处理程序包的文章。再次它很旧,并且有一段时间没有更新。

标签: phplaravelapiexceptionlaravel-passport

解决方案


推荐阅读