If this package is helpful, please give it a βοΈβοΈβοΈ. Thank you!
GitHub Repository: https://github.com/shipsaas/laravel-resource-reducer
Documentation: https://reducer.shipsaas.tech/
Ever thinking about how to speed up your application by optimizing the response? π
Laravel Resource Reducer helps you to optimize every API request by:
- Reduce the response's size, get what you need βοΈ
- Defer execution and allow on-demand data
- Responses to consumers faster π
- No more BIG FAT JSON every item/request
- Computation only starts when requires, save CPU & memory π
- Built-in relationship access by using dot notation π
- Eager-loading on steroids (automated eager-loading, no more N+1 pain) π
A simple yet super effective method to skyrocketing your API responding times π₯°
If you know about GraphQL, To query for data, we need to define which fields we want to retrieve.
Laravel Resource Reducer is heavily inspired from GraphQL approach. β€οΈ
Supports
- Laravel 10+
- PHP 8.2+
Compatibility
- Single Eloquent Model β
- Collection of Eloquent Models β
- Pagination β
(π‘ we have to use
Resource::collection
for the time being) - (Planned) Collection of Arrays
- (Planned) Collection of Objects
Installation
composer require shipsaas/laravel-resource-reducer
API Consumer Usage
Use the query _f
or _fields
, Reducer supports both ways:
http://api/users?_f=id,name,role.name,created_at
http://api/users?_fields[]=id,_fields[]=email
No more unnecessary fields and faster response TODAY π
Backend Implementation
Resource Class
Same as Laravel Resource, using our JsonReducerResource
as the parent class.
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,
];
}
}
Remember to wrap your accessor in a Closure/Callable.
This ensures computation won't start (wait for the right time π).
Return the data
Same as today as how we are using Laravel Resource:
// UserController@index
return UserResource::collection($users)->response();
// UserController@show
return (new UserResource($users->first()))->response();
Conclusion
If this package is helpful, please give it a βοΈβοΈβοΈ. Thank you!
Top comments (0)