arrilot/laravel-api-generator

此包已被弃用且不再维护。未建议替代包。

使用 fractal 构建REST API的两种简单工具:控制台生成器和API骨架

1.1.3 2018-07-21 23:48 UTC

This package is auto-updated.

Last update: 2022-02-16 17:28:32 UTC


README

Total Downloads Scrutinizer Quality Score MIT License

Laravel Api Generator (不再支持)

使用 fractal 构建REST API的两种简单工具:控制台生成器和API骨架

简介

此包提供以下两个功能

  1. 控制台生成器,通过单个命令创建控制器、Fractal转换器和路由。

  2. 基本的REST API骨架,如果您需要标准化的东西,这可能非常有用。它是100%可选的。

如果您不使用Fractal作为转换层,那么此包可能不是您的最佳选择。

安装

  1. 运行 composer require arrilot/laravel-api-generator

  2. app.php 配置文件中注册服务提供者

<?php

'providers' => [
    ...
    'Arrilot\Api\ServiceProvider',
],
?>
  1. 将基本文件夹结构复制到 app/Api cp -R vendor/arrilot/laravel-api-generator/templates/Api app/Api 并检查您得到的文件。如果您需要,您可以在以后使用不同的路径。

用法

生成器

添加的唯一控制台命令是 artisan make:api <ModelName>

假设您需要从用户表创建一个列出/创建/更新等用户的REST API。为此,您需要执行大量的样板操作 - 创建控制器、转换器、设置所需的路由。

php artisan make:api User 会为您完成所有工作。

  1. 您可能已经注意到,安装后您已经有一个路由文件 app/Api/routes.php,看起来像这样
<?php

Route::group(['prefix' => 'api/v1', 'namespace' => 'App\Api\Controllers'], function () {
    //
});

如果您喜欢,可以随意更改它。

生成器将 Route::resource('users', 'UserController'); 添加到文件末尾。

<?php

Route::group(['prefix' => 'api/v1', 'namespace' => 'App\Api\Controllers'], function () {
    //
    Route::resource('users', 'UserController');
});

如您所见,它足够智能,可以检测一些路由组并适当处理这种情况。

  1. 然后生成器创建一个继承基本API控制器的控制器。
<?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;
    }
}

您可以尽可能多地自定义此占位符。

  1. 最后,生成器创建一个Fractal转换器
<?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,
        ];
    }
}

此占位符也可以自定义。

骨架

您可能已经注意到,刚刚生成的控制器包含两个公共方法 - model()transformer()。这是因为这些方法是您在控制器中设置基本REST API所需的所有内容,如果您使用骨架。

开箱即用的路由列表

  1. GET api/v1/users
  2. GET api/v1/users/{id}
  3. POST api/v1/users
  4. PUT api/v1/users/{id}
  5. DELETE api/v1/users/{id}

请求和响应格式为json。通过 $_GET['include'] 支持Fractal包含。可以在您的控制器中通过覆盖 rulesForCreaterulesForUpdate 来设置创建和更新的验证规则。

此骨架不是万能的,但在许多情况下,它可能是您需要的或可以作为您API的不错起点。

您可以通过https://github.com/Arrilot/laravel-api-generator/blob/master/src/Skeleton/BaseController.php 获取更多信息。

如果您不喜欢骨架代码,只需在基控制器Api\Controllers\Controller中停止继承它,并在您的配置中覆盖控制器存根,移除model()transformer()方法。

配置

所有路径和生成器的存根都是可配置的。

https://github.com/Arrilot/laravel-api-generator/blob/master/src/config/config.php