是否所有API响应都需要显式返回json函数?



我正在进入api controllers,我想知道这个index function:

public function index()
{
$data = DB::table('galleries')->get();
return response()->json($data);
}

在我的api controller必须与response()->json()返回,或者如果它是OK的只是返回变量:

public function index()
{
$data = DB::table('galleries')->get();
return $data;
}

似乎都有效。有理由使用前者吗?

return $data将把$data转换成json响应。没有头文件将被设置,并且你的前端不会将其识别为json对象。

return response()将返回一个完整的Response实例。从doc

返回一个完整的响应实例允许你自定义响应的HTTP状态码和报头。Response实例继承自SymfonyComponentHttpFoundationResponse类,该类为构建HTTP响应提供了多种方法

forreturn response()->json()method

json方法将自动将Content-Type头设置为application/json,并使用json_encodePHP函数将给定数组转换为JSON

所以这将被识别为json对象在你的前端。在laravel文档中阅读更多内容。

当你发送一些东西作为响应,而不是一个Response的实例,那么Laravel将创建一个新的Response实例作为内容。当响应被发送并且该对象是一个数组(或可数组)或可转换为JSON的东西时,它将作为JSON响应发送。此时,所有相关的标题将是正确的。

如果您对它的工作原理感到好奇,可以考虑源代码的两个部分:
  1. 检查响应是否已经是Response的实例,如果不是则构造一个
  2. 决定响应内容是否为JSON的部分

如果你想要我的意见,那么你应该做response()->json(...),它创建了一个JsonResponse实例,没有机会是含糊不清的,否则你就依赖于未记录的行为,这是可能会改变的。

似乎都是正确的,但如果你以json形式发送,它将是正式的,在前端网站,他们可以很容易地使用

最新更新