An api package for Laravel and Lumen.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
tests
.editorconfig
.gitignore
.styleci.yml
.travis.yml
CHANGELOG.md
CONDUCT.md
CONTRIBUTING.md
ISSUE_TEMPLATE.md
LICENSE.md
PULL_REQUEST_TEMPLATE.md
README.md
composer.json
phpunit.xml.dist

README.md

Artisan API

Latest Stable Version Latest Unstable Version Software License Build Status Coverage Status Total Downloads

An api service for Laravel or Lumen. Helps you send responses with the proper status and code. Uses Fractal for items and collections.

Setup/Install

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,

Usage

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:

ArtisanApiInterface

Transformers

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"

Testing

$ composer test

Contributing

Please see CONTRIBUTING and CONDUCT for details.

Credits

License

The MIT License (MIT). Please see License File for more information.