arrilot / laravel-api-generator
两个用于构建 REST API 的简单工具:控制台生成器和 API 骨架
Requires
- php: >=5.4.0
- illuminate/support: >=5.5
- league/fractal: 0.*
README
Laravel Api Generator (不再支持)
两个用于构建 REST API 的简单工具:控制台生成器和 API 骨架
简介
本包提供以下两个功能
-
控制台生成器:通过单个命令创建控制器、Fractal 转换器和路由。
-
基本的 REST API 骨架,如果你需要标准化的东西,这将非常有帮助。它是100%可选的。
如果你不使用 Fractal 进行转换层,这个包可能不是你的正确选择。
安装
-
运行
composer require arrilot/laravel-api-generator
-
在
app.php
配置文件中注册服务提供器
<?php 'providers' => [ ... 'Arrilot\Api\ServiceProvider', ], ?>
- 将基本文件夹结构复制到 app/Api
cp -R vendor/arrilot/laravel-api-generator/templates/Api app/Api
并检查你得到的内容。如果需要,你可以稍后使用不同的路径。
使用
生成器
添加的唯一控制台命令是 artisan make:api <ModelName>
。
假设你需要创建一个用于列出/创建/更新等用户的 REST API。为此,你需要执行许多样板操作 - 创建控制器、转换器、设置所需的路由。
php artisan make:api User
会为你完成所有工作。
- 你可能已经注意到,安装后你已经有一个路由文件
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'); });
如你所见,它足够智能,可以检测一些路由分组并适当地处理这种情况。
- 然后生成器创建一个继承基本 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; } }
你可以根据自己的需求定制这个存根。
- 最后,生成器创建一个 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 的东西。
开箱即用的路由列表
GET api/v1/users
GET api/v1/users/{id}
POST api/v1/users
PUT api/v1/users/{id}
DELETE api/v1/users/{id}
请求和响应格式为 json,Fractal 包括通过 $_GET['include'] 支持。创建和更新的验证规则可以通过在控制器中重写 rulesForCreate
和 rulesForUpdate
来设置。
这个骨架不是万能的,但在许多情况下,它可能是你需要的,或者可以作为你 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