shipsaas/laravel-resource-reducer

使用 Laravel Resource Reducer 减少字段并加快响应大小

1.1.1 2024-03-13 14:27 UTC

This package is auto-updated.

Last update: 2024-09-13 15:48:45 UTC


README

Build & Test (PHP 8.2 + Laravel 10+) codecov

是否曾想过通过优化响应来加快您的应用程序?👀

Laravel Resource Reducer 通过以下方式帮助您优化每个 API 请求:

  • 减少响应大小,获取所需内容 ⭐️
    • 延迟执行,允许按需数据
  • 更快地向消费者响应 🚀
    • 不再需要每次每个项目/请求都包含大而胖的 JSON
  • 仅在需要时开始计算,节省 CPU 和内存 😎
  • 使用点符号进行内置关系访问 👀
  • 超级增强的懒加载(自动懒加载,不再有 N+1 痛苦) 🔋

一种简单而非常有效的方法,可快速提高 API 响应时间 🥰

如果您了解 GraphQL,为了查询数据,我们需要定义要检索哪些 字段。Laravel Resource Reducer 从 GraphQL 方法中深受启发。💖

支持

  • Laravel 10 & 11
  • PHP 8.2+

兼容性

  • 单个 Eloquent 模型 ✅
  • Eloquent 模型集合 ✅
  • 分页 ✅(🟡 目前我们必须使用 Resource::collection
  • (计划中)数组集合
  • (计划中)对象集合

安装

composer require shipsaas/laravel-resource-reducer

用法

Laravel Resource Reducer 是 Laravel Resource 的超集,因此我们可以像使用普通 Resource 一样使用 Reducer。

有关详细文档和最佳实践,请参阅: Reducer 文档

资源类

简单地通过扩展 ShipSaasReducer\Json\JsonReducerResource 迁移您的 Resource 类,实现 definitions 方法。

迁移是 1:1 迁移,没有破坏性更改 😉。

class UserResource extends JsonReducerResource
{
    public function definitions(Request $request): array
    {
        return [
            'id' => fn () => $this->id,
            'email' => fn () => $this->email,
            'created_at' => fn () => $this->created_at,
        ];
    }
}

请记住在闭包/可调用中包装您的访问器。这确保了计算不会在运行时开始(等待正确的时机 😉)。

注意:如果您正在迁移到 JsonReducerResource,请记住删除 toArray(),我们在那里处理魔法 🥹。

返回数据

与今天我们使用 Laravel Resource 的方式相同

// UserController@index
return UserResource::collection($users)->response();

// UserController@show
return (new UserResource($users->first()))->response();

从 API 消费者那里

使用查询 _f_fields,Reducer 支持两种方式

  • http://api/users?_f=id,name,role.name,created_at
  • http://api/users?_fields[]=id,_fields[]=email

测试

运行 composer test 😆

可用测试

  • 单元测试
  • 功能测试

贡献者

  • Seth Phat

贡献与支持项目

请随时提交任何 PR,请遵循 PSR-1/PSR-12 编码约定,并且测试是必需的。

如果此包有帮助,请给它一个 ⭐️⭐️⭐️。谢谢!

许可证

MIT 许可证