Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shipsaas/laravel-resource-reducer
Resource Reducer optimizes your API endpoint responses by return what consumers need, defer execution and no more BIG FAT JSON.
https://github.com/shipsaas/laravel-resource-reducer
laravel laravel-10 laravel-library optimization php reducer
Last synced: about 2 months ago
JSON representation
Resource Reducer optimizes your API endpoint responses by return what consumers need, defer execution and no more BIG FAT JSON.
- Host: GitHub
- URL: https://github.com/shipsaas/laravel-resource-reducer
- Owner: shipsaas
- License: mit
- Created: 2023-09-03T10:08:53.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-03-13T14:29:26.000Z (10 months ago)
- Last Synced: 2024-09-16T23:34:06.025Z (4 months ago)
- Topics: laravel, laravel-10, laravel-library, optimization, php, reducer
- Language: PHP
- Homepage: https://reducer.shipsaas.tech
- Size: 64.5 KB
- Stars: 45
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Laravel Resource Reducer from ShipSaaS
[![Build & Test (PHP 8.2 + Laravel 10+)](https://github.com/shipsaas/laravel-resource-reducer/actions/workflows/build.yml/badge.svg)](https://github.com/shipsaas/laravel-resource-reducer/actions/workflows/build.yml)
[![codecov](https://codecov.io/gh/shipsaas/laravel-resource-reducer/graph/badge.svg?token=alt8CdVUg1)](https://codecov.io/gh/shipsaas/laravel-resource-reducer)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 & 11
- 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
```bash
composer require shipsaas/laravel-resource-reducer
```## Usage
Laravel Resource Reducer is the SuperSet from Laravel Resource, thus we can use the Reducer just like
the way we use normal Resource.For detailed documentation & best practices, check out: [Reducer Documentation](https://reducer.shipsaas.tech)
### Resource Class
Simply migrate your `Resource` class by extending `ShipSaasReducer\Json\JsonReducerResource`, implement the
`definitions` method.The migration is 1:1 migration, no breaking changes 😉.
```php
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 on Runtime (wait for the right time 😉).**NOTE:** remember to remove the `toArray()` if you are migrating to `JsonReducerResource` 🥹, we handles magic there.
### Return the data
Same as today as how we are using Laravel Resource:
```php
// UserController@index
return UserResource::collection($users)->response();// UserController@show
return (new UserResource($users->first()))->response();
```### From API consumers
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`## Testing
Run `composer test` 😆
Available Tests:
- Unit Testing
- Feature Testing## Contributors
- Seth Phat## Contributions & Support the Project
Feel free to submit any PR, please follow PSR-1/PSR-12 coding conventions and testing is a must.
If this package is helpful, please give it a ⭐️⭐️⭐️. Thank you!
## License
MIT License