Laravel Endpoint is a CRUD REST API package for Laravel.
- REST CRUD Endpoint scaffolding
- Normalized JSON Response using laravel-fractal
- Simple filtering operations
- Ability to customize fractal serializer
- Ability to customize filtering and sorting strategies
- Elasticsearch / Algolia search
- Api Documentation (Swagger, API Blueprint)
You can pull in the package via composer:
$ composer require sdv/laravel-endpoint
Register the service provider.
// config/app.php
'providers' => [
...
SdV\Endpoint\EndpointServiceProvider::class,
]
Replace the render method in app/Exceptions/Handler.php
.
use SdV\Endpoint\ProvidesExceptionsHandler;
class Handler extends ExceptionHandler
{
use ProvidesExceptionsHandler;
...
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
if ($this->isRequestForApi($request)) {
return $this->renderJson($exception, $request);
}
return parent::render($request, $exception);
}
...
}
composer test
php artisan endpoint:make:all Post v1
This will create all this files.
- app/Post.php
- app/Repositories/PostRepository.php
- app/Transformers/PostTransformer.php
- app/Http/Controllers/Api/V1/PostController.php
Options:
- --mongo : Generate a Laravel-MongoDB compatible Model. (You need to install https://github.com/jenssegers/laravel-mongodb in your app)
- --module=Modules\Search : Generate all the files under the App\Modules\Search namespace.
- app
- Modules
- Search
- Http\Controllers\Api\V1
- Models
- Repositories
- Transformers
- bootstrap
- config
- database
- ...
Then, you need to register your api routes.
// routes/api.php
Route::group(['namespace' => 'Api\V1', 'prefix' => 'v1'], function () {
Route::resource('posts', 'PostController', ['except' => [
'create', 'edit'
]]);
});
php artisan endpoint:make:model Post
This will create the file app/Post.php
and insert the minimum boilerplate with filtrable trait.
Optionnaly, you can add the --mongo flag to generate a Laravel-MongoDB compatible Model.
php artisan endpoint:make:controller Post v1
This will create the file app/Http/Controllers/Api/V1/PostController.php
and insert the minimum boilerplate.
php artisan endpoint:make:repository Post
This will create the file app/Repositories/PostRepository.php
and insert the minimum boilerplate.
php artisan endpoint:make:transformer Post
This will create the file app/Transformers/PostTransformer.php
and insert the minimum boilerplate.
/api/v1/topics?page=2
/api/v1/topics?per_page=50
/api/v1/topics?limit=all
The and
filter is applied by default.
/api/v1/topics?filter[]=name,eq,laravel&filter[]=name,eq,eloquent&satisfy=all
/api/v1/topics?filter[]=name,eq,laravel&filter[]=name,eq,eloquent&satisfy=any
/api/v1/topics?sort=name
/api/v1/topics?sort=-name
/api/v1/topics?sort=-slug,name
Update your transformer to add your include rules, according to fractal docs (http://fractal.thephpleague.com/transformers/)
Then you can include related models on your calls
/api/v1/topics?include=posts,posts.author
- Bad request (400)
$this->badRequest('The request was unacceptable.')
- Unauthorized (401)
$this->unauthorized('No valid API key was provided.')
- Forbidden (403)
$this->forbidden('Access forbidden.')
- Not found (404)
$this->notFound('Resource not found.')
- Method not allowed (405)
$this->methodNotAllowed('The HTTP method is not allowed.')
- Unprocessable entity (422)
$this->unprocessableEntity('Invalid fields.')
- Too many requests (429)
$this->tooManyRequests('Too many requests hit the API.')
- Server error (500)
$this->serverError('Internal server error.')
Note: The ProvidesExceptionsHandler
comes with default support for the following exceptions:
- Illuminate\Database\Eloquent\ModelNotFoundException
- Illuminate\Validation\ValidationException
- Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
- Symfony\Component\HttpKernel\Exception\NotFoundHttpException
Laravel Endpoint is open-sourced software licensed under the MIT license