是否需要使用 json 函数显式返回所有 API 响应?
Do all API responses need to explicitly be returned with a json function?
我正在进入 api controllers
并且想知道这个 index function
:
public function index()
{
$data = DB::table('galleries')->get();
return response()->json($data);
}
在我的 api controller
中必须用 response()->json()
编辑 return 或者如果只 return 变量是可以的:
public function index()
{
$data = DB::table('galleries')->get();
return $data;
}
两者似乎都有效。有理由使用前者吗?
两者似乎都是正确的,但如果您以 json 的形式发送,它将是正式的并且在 fornt-end 网站上他们可以轻松使用
return $data
只会将 $data
转换为 json 响应。不会设置 header 并且您的前端不会将其识别为 json object.
return response()
将 return 一个完整的 Response
实例。来自文档
Returning a full Response instance allows you to customize the response's HTTP status code and headers. A Response instance inherits from the Symfony\Component\HttpFoundation\Response
class, which provides a variety of methods for building HTTP responses
对于return response()->json()
方法
The json
method will automatically set the Content-Type
header to application/json
, as well as convert the given array to JSON using the json_encode
PHP function
所以这将在您的前端被识别为 json object。在 laravel doc.
阅读更多内容
当您作为响应发送的内容还不是 Response
的实例时,Laravel 将创建一个 Response
的新实例,并将其作为内容。当发送响应并且 object 是一个数组(或可排列的)或可转换为 JSON 的东西时,它会作为 JSON 响应发送。到那时所有相关的 headers 都是正确的。
如果您对它的工作原理感到好奇,可以考虑源代码的两个部分:
- The part that checks whether the response is already an instance of
Response
and constructs one if not
- The part that decides whether a response content should be JSON
如果你想要我的意见,那么你应该做 response()->json(...)
来创建一个 JsonResponse
实例,它不可能是模棱两可的,否则你将依赖可能会发生变化的未记录的行为。
我正在进入 api controllers
并且想知道这个 index function
:
public function index()
{
$data = DB::table('galleries')->get();
return response()->json($data);
}
在我的 api controller
中必须用 response()->json()
编辑 return 或者如果只 return 变量是可以的:
public function index()
{
$data = DB::table('galleries')->get();
return $data;
}
两者似乎都有效。有理由使用前者吗?
两者似乎都是正确的,但如果您以 json 的形式发送,它将是正式的并且在 fornt-end 网站上他们可以轻松使用
return $data
只会将 $data
转换为 json 响应。不会设置 header 并且您的前端不会将其识别为 json object.
return response()
将 return 一个完整的 Response
实例。来自文档
Returning a full Response instance allows you to customize the response's HTTP status code and headers. A Response instance inherits from the
Symfony\Component\HttpFoundation\Response
class, which provides a variety of methods for building HTTP responses
对于return response()->json()
方法
The
json
method will automatically set theContent-Type
header toapplication/json
, as well as convert the given array to JSON using thejson_encode
PHP function
所以这将在您的前端被识别为 json object。在 laravel doc.
阅读更多内容当您作为响应发送的内容还不是 Response
的实例时,Laravel 将创建一个 Response
的新实例,并将其作为内容。当发送响应并且 object 是一个数组(或可排列的)或可转换为 JSON 的东西时,它会作为 JSON 响应发送。到那时所有相关的 headers 都是正确的。
如果您对它的工作原理感到好奇,可以考虑源代码的两个部分:
- The part that checks whether the response is already an instance of
Response
and constructs one if not - The part that decides whether a response content should be JSON
如果你想要我的意见,那么你应该做 response()->json(...)
来创建一个 JsonResponse
实例,它不可能是模棱两可的,否则你将依赖可能会发生变化的未记录的行为。