【发布时间】:2017-04-06 04:43:12
【问题描述】:
每当我呼叫/api/v1/posts/1 时,呼叫都会转接到show 方法
public function show(Post $post) {
return $post;
}
在PostController.php 资源丰富的控制器中。如果帖子确实存在,则服务器返回 JSON 响应。但是,如果帖子确实不存在,服务器会返回纯 HTML,尽管请求显然期望返回 JSON。这是 Postman 的演示。
问题在于 API 应该返回 application/json,而不是 text/html。所以,这是我的问题:
1. 如果我们使用隐式路由模型绑定时发生异常,Laravel 是否内置支持自动返回 JSON(如上面的 show 方法中,当我们有 404)?
2. 如果可以,我该如何启用它? (默认情况下,我得到的是纯 HTML,而不是 JSON)
如果不是在每个 API 控制器中复制以下内容的替代方法
public function show($id) {
$post = Post::find($id); // findOrFail() won't return JSON, only plain HTML
if (!$post)
return response()->json([ ... ], 404);
return $post;
}
3. 在app\Exceptions\Handler 中是否有通用方法可以使用?
4.标准错误/异常响应包含什么?我用谷歌搜索了这个,但发现了许多自定义变体。
5. 为什么 JSON 响应仍未内置到隐式路由模型绑定中?为什么不简化开发人员的生活并自动处理这些低级问题?
编辑
在 Laravel IRC 的人建议我不要理会错误响应之后,我遇到了一个难题,他们认为 标准 HTTP 异常默认呈现为 HTML,以及使用 API 的系统应该在不看身体的情况下处理 404。我希望更多的人加入讨论,不知道你们会如何回应。
【问题讨论】:
标签: laravel laravel-5.4