Laravel API 响应对象格式化

Jam*_*ett 3 rest laravel axios laravel-api

我创建了一个基本的 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我从 API URL 检索响应并将其记录到控制台时,我得到以下输出:

在此输入图像描述

目前,我的响应对象包含它自己的数据对象,然后该数据对象包含另一个数据对象。因此,要访问数据,我必须使用response.data.data。

我想知道这是否真的是正确的方法。由于response.data.data的命名约定似乎不是一个非常干净的方法来做到这一点。我在网上看到了一些指南,其中是这样完成的,但我想知道是否有我遗漏的通常遵循的约定。也许这是正确的,但我只是想从更有经验的程序员那里得到一些见解。

bri*_*ice 6

在我看来,你的处理方式很好:

  • response是通过 axios 的完整响应对象
  • response.data是返回的完整响应正文
  • response.data.datadata返回的响应体的节点

一些建议:

  • 而不是success在响应中使用,可以从返回的状态代码中暗示:200-299 内的任何内容都是成功,300-399 的任何内容都是重定向,400-499 的任何内容都是客户端错误,500+ 的任何内容都是服务器错误(看这里
  • 在我看来,应该为成功的数据保留节点,而不是data在错误的情况下使用,而errors应该使用诸如
  • 您的sendError方法应默认为状态代码500而不是200,就像200成功的状态代码一样