Two simple tools for building REST APIs with fractal: console generator and API skeleton
This package provides two features
- 
Console generator which creates Controller, Fractal Transformer and routes in a single command.
 - 
Basic REST API skeleton that can be really helpful if you need something standard. It's 100% optional.
 
If you do not use Fractal for your transformation layer, this package is probably not the right choice for you.
- 
Run
composer require arrilot/laravel-api-generator - 
Register a service provider in the
app.phpconfiguration file 
<?php
'providers' => [
    ...
    'Arrilot\Api\ServiceProvider',
],
?>- Copy basic folder structure to app/Api 
cp -R vendor/arrilot/laravel-api-generator/templates/Api app/Apiand check what you got there. If you need you can use different paths later. 
The only console command that is added is artisan make:api <ModelName>.
Imagine you need to create a rest api to list/create/update etc users from users table. To achieve that you need to do lots of boilerplate operations - create controller, transformer, set up needed routes.
php artisan make:api User does all the work for you.
- You may have noticed that after installation you already have a routes file 
app/Api/routes.phpwhich looks like that: 
<?php
Route::group(['prefix' => 'api/v1', 'namespace' => 'App\Api\Controllers'], function () {
    //
});Feel free to change it if you like.
The generator adds Route::resource('users', 'UserController'); to the end of this file.
<?php
Route::group(['prefix' => 'api/v1', 'namespace' => 'App\Api\Controllers'], function () {
    //
    Route::resource('users', 'UserController');
});As you can see it's smart enough to detect some route groups and treat this situation properly.
- Then the generator creates a controller that extends base api controller.
 
<?php namespace App\Api\Controllers;
use App\User;
use App\Api\Transformers\UserTransformer;
class UserController extends Controller
{
    /**
     * Eloquent model.
     *
     * @return \Illuminate\Database\Eloquent\Model
     */
    protected function model()
    {
        return new User;
    }
    /**
     * Transformer for the current model.
     *
     * @return \League\Fractal\TransformerAbstract
     */
    protected function transformer()
    {
        return new UserTransformer;
    }
}You can customize this stub as much as you want.
- Finally the generator creates a fractal Transformer
 
<?php namespace App\Api\Transformers;
use App\User;
use League\Fractal\TransformerAbstract;
class UserTransformer extends TransformerAbstract
{
    /**
     * Resource key.
     *
     * @var string
     */
    protected $resourceKey = null;
    
    /**
     * Turn this item object into a generic array.
     *
     * @param $item
     * @return array
     */
    public function transform(User $item)
    {
        return [
            'id'         => (int)$item->id,
            'created_at' => (string)$item->created_at,
            'updated_at' => (string)$item->updated_at,
        ];
    }
}This stub is customizable too.
You may have noticed that controller which has just been generated includes two public methods - model() and transformer()
That's because those methods are the only thing that you need in your controller to set up a basic REST API if you use the Skeleton.
The list of routes that are available out of the box:
GET api/v1/usersGET api/v1/users/{id}POST api/v1/usersPUT api/v1/users/{id}DELETE api/v1/users/{id}
Request and respone format is json
Fractal includes are supported via $_GET['include'].
Validation rules for create and update can be set by overwriting rulesForCreate and rulesForUpdate in your controller.
This skeleton is not a silver bullet but in many cases it can be either exactly what you need or can be used as a decent starting point for your api.
You can check https://github.com/Arrilot/laravel-api-generator/blob/master/src/Skeleton/BaseController.php for more info.
If you don't like the Skeleton just stop inheriting it in the base controller -  Api\Controllers\Controller and overwrite the controller stub in your config to remove  model() and transformer() methods.
All paths and generator's stubs are configurable.
https://github.com/Arrilot/laravel-api-generator/blob/master/src/config/config.php