An api service for Laravel or Lumen. Helps you send responses with the proper status and code. Uses Fractal for items and collections.
Require it with Composer
$ composer require isaackearl/artisan-api
Add the service provider to config/app.php
// For Laravel add this to config/app.php
IsaacKenEarl\LaravelApi\Providers\ArtisanApiServiceProvider::class
// For Lumen add this to bootstrap/app.php
$app->register(IsaacKenEarl\LaravelApi\Providers\ArtisanApiServiceProvider::class);
(Optional) Add the API facade in config/app.php
'Api' => IsaacKenEarl\LaravelApi\Facades\Api::class,
In your controllers you can do stuff like this:
// do stuff like this
public function show() {
return Api::respondWithItem($user, new UserTransformer());
}
// or like this:
return Api::respondNotFound();
There are alot of options. Include the ArtisanApiInterface in your controller constructor and you can use it without the facade.
private $api;
public function __construct(ArtisanApiServiceInterface $apiService)
{
$this->api = $apiService;
}
public function index()
{
$users = User::all();
return $this->api->respondWithCollection($users, new UserTransformer());
}
You can do custom stuff too and chain methods
// you can respondWithError or respondWithMessage and customize the status code
// and response code etc
return $this->api
->setStatus(401)
->setResponseCode(ResponseCodes::UNAUTHORIZED)
->respondWithError('Not logged in');
Take a look at the ArtisanApiInterface to see all the supported methods. You can find that here:
Transformers allow you to control how the data is presented in the response of your API. A typical transformer looks like this:
class UserTransformer extends Transformer
{
function transform($user)
{
return [
'id' => $user->id,
'name' => $user->name,
'date_of_birth' => $user->date_of_birth->toDateString(),
'email' => $user->getPrimaryEmail()
];
}
}
You can generate a transformer with the make:transformer command
php artisan make:transformer UserTransformer
This package uses laravel-fractal as it's fractal implementation. Check out their docs on their github page for more specific usage information and examples.
Since we are using the laravel-fractal package you can also publish the laravel-fractal config to customize the response data.
php artisan vendor:publish --provider="Spatie\Fractal\FractalServiceProvider"
$ composer test
Please see CONTRIBUTING and CONDUCT for details.
The MIT License (MIT). Please see License File for more information.