API Exceptions for Laravel
All in one solution for exception for JSON REST APIs on Laravel and Lumen.
About
The goal of this package is to provide you with a set of most common exceptions that may be needed while developing JSON REST API. It also:
- Handles exceptions output.
- Handles exceptions report to logs.
- Overwrites default Validator to make validation errors more verbose.
- Has a FormRequest that to handle validation errors and pass them to ApiExceptions layer.
- Has middleware to catch all system errors such us
RuntimeExceptions
orModelNotFoundException
to handle them and threat as normal ApiExceptions.
Installation
PHP 5.4+ or HHVM 3.3+, Composer and Laravel 5.1+ are required.
To get the latest version of Laravel Laravel-API-Debugger, simply add the following line to the require block of your composer.json
file.
"lanin/laravel-api-exceptions": "^0.1.0"
You’ll then need to run composer install
or composer update
to download it and have the autoloader updated.
Once Laravel-API-Exceptions is installed, you need to register the service provider. Open up config/app.php
and add the following to the providers key.
Lanin\Laravel\ApiExceptions\ApiExceptionsServiceProvider::class,
Exceptions
Every ApiException can be thrown as a normal exception and they will be automatically serialized to JSON with corresponding HTTP status:
{
"id": "not_found",
"message": "Requested object not found."
}
This object will be also populated with trace info, when APP_DEBUG
is true.
Also it can have meta
attribute when there is additional info. For example for validation errors:
{
"id": "validation_failed",
"message": "Validation failed.",
"meta": {
"errors": {
"tags": [{
"rule": "max.array",
"message": "The tags may not have more than 10 items.",
"parameters": ["10"]
}]
}
},
"trace": {
...
}
}
For ValidationApiException
, meta attribute has errors
object that contains validations errors.
Every attribute of this object is a name of a request parameter to validate to and value is an array of errors with description.
Handler
Extend your default exceptions handler with:
\Lanin\Laravel\ApiExceptions\LaravelExceptionHandler
for Laravel\Lanin\Laravel\ApiExceptions\LumenExceptionHandler
for Lumen
And remove everything else. Example:
<?php
namespace App\Exceptions;
use Lanin\Laravel\ApiExceptions\LaravelExceptionHandle;
class Handler extends LaravelExceptionHandle
{
}
FormRequest
To use FormRequest extend all your Request classes with \Lanin\Laravel\ApiExceptions\Support\Request
.
It will automatically support validation errors and pass them to the output.
It also has a very handy helper method validatedOnly()
that returns from request only those items that are registered in rules method.
RuntimeExceptionsHandler
Also you can catch all system exceptions using \Lanin\Laravel\ApiExceptions\Support\RuntimeExceptionsHandler
.
Just import it to your Http\Kernel
$middleware array, and that’s it.
Note! This project can be easily integrated with Laravel-API-Debugger. Just install it, follow instructions, and debug your API!
Contributing
Please feel free to fork this package and contribute by submitting a pull request to enhance the functionalities.