ddiimmkkaass/lumen-api-generator

两个简单的工具,用于使用分形构建REST API:控制台生成器和API骨架

1.1.0 2017-11-27 11:59 UTC

This package is not auto-updated.

Last update: 2024-09-22 12:27:23 UTC


README

Total Downloads Scrutinizer Quality Score MIT License

这是arrilot/laravel-api-generator的完整副本,已适配Lumen

Lumen Api Generator

两个简单的工具,用于使用分形构建REST API:控制台生成器和API骨架

简介

此包提供两个功能

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

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

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

安装

  1. 运行composer require ddiimmkkaass/lumen-api-generator

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

<?php

'providers' => [
    ...
    'DDiimmkkaass\Api\ServiceProvider',
],
?>
  1. 将基本文件夹结构复制到app/Api cp -R vendor/ddiimmkkaass/lumen-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/DDiimmkkaass/lumen-api-generator/blob/master/src/Skeleton/BaseController.php以获取更多信息。

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

配置

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

https://github.com/DDiimmkkaass/lumen-api-generator/blob/master/src/config/config.php