shipsaas / laravel-resource-reducer
使用 Laravel Resource Reducer 减少字段并加快响应大小
1.1.1
2024-03-13 14:27 UTC
Requires
- php: >=8.2
- laravel/framework: ^10|^11|dev-master
Requires (Dev)
- fakerphp/faker: ^v1.20.0
- friendsofphp/php-cs-fixer: ^3.10
- mockery/mockery: ^1.5.1
- orchestra/testbench: ^8
- phpunit/php-code-coverage: ^10
- phpunit/phpunit: ^10
README
是否曾想过通过优化响应来加快您的应用程序?👀
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 许可证