chuoke/response4laravel

Laravel 的响应助手。

0.0.1 2023-02-11 11:06 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此 Laravel 包可以帮助组织统一的 API 响应数据格式。它设计为能够解析所有类型的数据,包括 API 资源、集合和分页器。并且您可以自定义它。

安装

您可以通过 composer 安装此包

composer require chuoke/response4laravel

用法

导入响应对象

为了启用统一响应,我们通常定义一个 BaseController 并创建一个用于统一响应的辅助方法。

首先,在 BaseController 中使用辅助特质,其中有一个 response 方法,它返回 Chuoke\Response4Laravel\Response 实例对象。

顺便说一下,将来将根据情况添加更多辅助方法。

use Chuoke\Response4Laravel\Concerns\ResponseHelper;

或者创建您想要的辅助方法。这样,您可以很容易地自定义响应对象参数,详细的示例将在后面展示。

use Chuoke\Response4Laravel\Response;

protected function apiResponse() {
    return Response::make();
}

接下来,您可以在控制器中使用它。

通用用法

根据一般情况,仅定义了最常见的状态的快捷方法。

$this->response()->ok(); // or $this->response()->ok($data)
$this->response()->created($data, 'The data was created successfule!');
$this->response()->notFound('The data not exists');
$this->response()->badRequest('Your submit is wrong.');

请参阅代码以获取更多详细信息,如果缺少您所需的内容,请创建自定义响应类,或者如果有更多通用方法需要添加,请提交 PR。

响应资源

单个资源
$this->response()->ok($userResource);
// output content: {"data":{"id":1,"name":"name"}}

默认情况下,如果没有使用包装,资源将不存在 data

集合资源
$this->response()->ok($userCollectionResource);
// output content: {"data":[{"id":1,"name":"name"},{"id":2,"name":"name2"}]}

data 总是存在。

并且您可以自定义 data 键。

$this->response()->collectionWrap('users')->ok($userCollectionResource);
// output content: {"users":[{"id":1,"name":"name"},{"id":2,"name":"name2"}]}

数据包装器使用响应类中定义的第一个值,然后使用资源。如果没有定义,则单个资源不会被包装,但集合总是被包装。默认键名为 data,可以为单条数据和集合设置不同的值。

分页响应

$users = User::query()->paginate($request->get('per_page'));

return $this->ok(UserResource::collection($users));
// output content: {"data":[{"id":1,"name":"user1"},{"id":2,"name":"user2"},{"id":3,"name":"user3"}],"links":{"first":"https://\/paginator?page=1","last":"https://\/paginator?page=4","prev":null,"next":"https://\/paginator?page=2"},"meta":{"current_page":1,"from":1,"last_page":4,"links":[{"url":null,"label":"« Previous","active":false},{"url":"https://\/paginator?page=1","label":"1","active":true},{"url":"https://\/paginator?page=2","label":"2","active":false},{"url":"https://\/paginator?page=3","label":"3","active":false},{"url":"https://\/paginator?page=4","label":"4","active":false},{"url":"https://\/paginator?page=2","label":"Next »","active":false}],"path":"https://\/paginator","per_page":3,"to":3,"total":10}}

自定义响应

在许多情况下,我们习惯于具有一致格式的响应数据。

protected function response()
{
    return Response::make()
        ->responseUsing(function ($data, $status, $message) {
            return response()->json([
                'code' => $status,
                'message' => $message ?: 'success',
                'data' => is_array($data) && array_key_exists('data', $data) && count($data) === 1 ? $data['data'] : $data,
            ], 200);
        });
}

//
$this->response()->ok(new UserResource(User::first()));
// output content: {"code":200,"message":"success","data":{"id":1,"name":"user1"}}

测试

composer test

变更日志

请参阅 CHANGELOG 了解最近更改的更多信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全漏洞

请审查 我们的安全策略 了解如何报告安全漏洞。

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。