Laravel API 响应对象格式
Laravel API Response Object formatting
我创建了一个基本的 Laravel REST API,它将为一些使用 axios 发出请求的 JavaScript 应用程序提供服务。
我的应用程序使用基本控制器来确保所有响应都以相同的格式发送:
class BaseController extends Controller
{
/**
* success response method.
*
* @param $result
* @param $message
*
* @return JsonResponse
*/
public function sendResponse($result, $message)
{
$response = [
'success' => true,
'data' => $result,
'message' => $message,
];
return response()->json($response, 200);
}
/**
* return error response.
*
* @param $error
* @param array $errorMessages
* @param int $code
*
* @return JsonResponse
*/
public function sendError($error, $errorMessages = [], $code = 200)
{
$response = [
'success' => false,
'message' => $error,
];
if (!empty($errorMessages)) {
$response['data'] = $errorMessages;
}
return response()->json($response, $code);
}
}
当我从 API URL 检索响应并将其记录到控制台时,我得到以下输出:
目前,我的响应对象包含它自己的数据对象,然后又包含另一个数据对象。因此,要访问数据,我必须使用 response.data.data.
我想知道这是否真的是正确的方法。由于 response.data.data 的命名约定似乎不是一种非常干净的方式来做到这一点。我在网上看到了一些指南,它们是通过这种方式完成的,但我想知道是否有任何我遗漏的通常遵循的约定。也许这是正确的,但我只是想从更有经验的程序员那里得到一些见解。
我认为你的处理方式很好:
response
是通过 axios 的完整响应对象
response.data
是返回的完整响应正文
response.data.data
是返回的响应体的data
节点
一些建议:
- 而不是在您的响应中使用
success
,这可以从返回的状态代码中暗示:200-299 内的任何内容都是成功的,300-399 中的任何内容都是重定向,400-499 中的任何内容都是客户端错误,任何 500+ 都是服务器错误(参见 here)
- 而不是在错误的实例中使用
data
,在我看来应该为成功的数据保留节点并且应该使用诸如 errors
的节点来代替
- 您的
sendError
方法应默认状态代码 500
而不是 200
,因为 200
是成功的状态代码
我创建了一个基本的 Laravel REST API,它将为一些使用 axios 发出请求的 JavaScript 应用程序提供服务。
我的应用程序使用基本控制器来确保所有响应都以相同的格式发送:
class BaseController extends Controller
{
/**
* success response method.
*
* @param $result
* @param $message
*
* @return JsonResponse
*/
public function sendResponse($result, $message)
{
$response = [
'success' => true,
'data' => $result,
'message' => $message,
];
return response()->json($response, 200);
}
/**
* return error response.
*
* @param $error
* @param array $errorMessages
* @param int $code
*
* @return JsonResponse
*/
public function sendError($error, $errorMessages = [], $code = 200)
{
$response = [
'success' => false,
'message' => $error,
];
if (!empty($errorMessages)) {
$response['data'] = $errorMessages;
}
return response()->json($response, $code);
}
}
当我从 API URL 检索响应并将其记录到控制台时,我得到以下输出:
目前,我的响应对象包含它自己的数据对象,然后又包含另一个数据对象。因此,要访问数据,我必须使用 response.data.data.
我想知道这是否真的是正确的方法。由于 response.data.data 的命名约定似乎不是一种非常干净的方式来做到这一点。我在网上看到了一些指南,它们是通过这种方式完成的,但我想知道是否有任何我遗漏的通常遵循的约定。也许这是正确的,但我只是想从更有经验的程序员那里得到一些见解。
我认为你的处理方式很好:
response
是通过 axios 的完整响应对象
response.data
是返回的完整响应正文response.data.data
是返回的响应体的data
节点
一些建议:
- 而不是在您的响应中使用
success
,这可以从返回的状态代码中暗示:200-299 内的任何内容都是成功的,300-399 中的任何内容都是重定向,400-499 中的任何内容都是客户端错误,任何 500+ 都是服务器错误(参见 here) - 而不是在错误的实例中使用
data
,在我看来应该为成功的数据保留节点并且应该使用诸如errors
的节点来代替 - 您的
sendError
方法应默认状态代码500
而不是200
,因为200
是成功的状态代码