arrilot/laravel-api-generator

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

两个用于构建 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 (不再支持)

两个用于构建 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,Fractal 包括通过 $_GET['include'] 支持。创建和更新的验证规则可以通过在控制器中重写 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