arrilot / laravel-api-generator
使用 fractal 构建REST API的两种简单工具:控制台生成器和API骨架
Requires
- php: >=5.4.0
- illuminate/support: >=5.5
- league/fractal: 0.*
README
Laravel Api Generator (不再支持)
使用 fractal 构建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。通过 $_GET['include'] 支持Fractal包含。可以在您的控制器中通过覆盖 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