shirokovnv / laravel-query-api-backend
Unified API for running queries with eloquent models from any http client
Requires
- illuminate/database: ^5.8|^6.0|^7.0|^8.0
- illuminate/support: ~5.8|~6|~7|~8
Requires (Dev)
- orchestra/testbench: ~5|~6
- phpunit/phpunit: ~9.0
This package is auto-updated.
Last update: 2024-10-29 06:12:25 UTC
README
Unified API for running queries with eloquent models from any http client.
For query data format and usage in frontend see this package
Installation
Via Composer
$ composer require shirokovnv/laravel-query-api-backend
Usage
Ensure all migrations done
php artisan migrate
Publish configuration:
php artisan vendor:publish --provider="Shirokovnv\LaravelQueryApiBackend\LaravelQueryApiBackendServiceProvider" --tag=config
Once installed you can do stuff like this in Controller:
$queryRunner = LaravelQueryApiBackend::makeQueryRunnerInstance($request, $options); $queryResult = $queryRunner->run(); $queryRunner->saveLog(); return response()->json($queryResult);
$request is Illuminate\Http\Request or Illuminate\Foundation\Http\FormRequest
For available options see config section
Request must contain following keys:
query_data
query_mode
client_request_id
This can be provided in middleware (check example controller and ClientRequestId middleware)
Example controller:
Shirokovnv\LaravelQueryApiBackend\Http\Controllers\QueryApiController
Available query modes:
transaction
runs a couple of queries as a whole. If one of the queries fails, transaction will be rolled back.
multiple
runs a couple of queries individually.
all occurred errors will be added to the error pool with the rest of the result.
Available types of queries:
create
delete
fetch (aka select)
find
update
custom
Authorization
Package provides a way to authorize actions with your queries.
By default no authorization needed.
- To switch it on, at first, the model you want to authorize requests for, should implement Shirokovnv\LaravelQueryApiBackend\Support\ShouldAuthorize interface.
The interface is simple and contains one static method:
public static function shouldAuthorizeAbilities(): array;
This function must return array that contains names of abilities, for ex.
return ['create', 'update', 'view', 'viewAny'];
Query type names and authorization ability names correlate as:
create -> create
custom -> custom
delete -> delete
fetch -> viewAny
find -> view
update -> update
- The second options are default laravel policies for your models.
Each policy contains specific methods, where you feel free to implement any logic for query authorization.
Validation
Each query can be validated the following way:
- Use Laravel FormRequest generator for model.
For ex. for App\Models\User create request with name Models\UserRequest
- Model should implement Shirokovnv\LaravelQueryApiBackend\Support\ShouldValidate interface
with one static method:
public static function shouldValidateActions(): array;
For ex:
return ['create', 'fetch', 'update', 'delete'];
Available list of actions is equal to list of query type names.
- FormRequest action name to method correlation:
custom, create -> POST
update -> PATCH
delete -> DELETE
find, fetch -> GET
Change log
Please see the changelog for more information on what has changed recently.
Testing
$ composer test
Contributing
Please see contributing.md for details and a todolist.
Security
If you discover any security related issues, please email shirokovnv@gmail.com instead of using the issue tracker.
Credits
License
MIT. Please see the license file for more information.