robinmarechal / laravel-rest-api
将REST API轻松添加到您的项目
Requires
- laravel/framework: ~5.6
This package is auto-updated.
Last update: 2024-09-25 07:30:46 UTC
README
轻松将RESTful API添加到您的Laravel项目
用法示例
由于它遵循Laravel的命名约定和RESTful API标准,因此REST API易于使用。
例如,假设您数据库中有一个posts表,那么您将想要从运行在myserver.com服务器上的API获取所有帖子。为此,您只需请求以下URL
http://myserver.com/api/posts
如果您只想获取ID为4的帖子
http://myserver.com/api/posts/4
如果您想获取第4个帖子的评论
http://myserver.com/api/posts/4/comments
注意:在这种情况下,您需要指定posts表(Post模型)有一个名为comments的关系。我们稍后将会讲解。
最后,如果您想获取第4个帖子的第3条评论
http://myserver.com/api/posts/4/comments/3
当然,也可以添加(POST)、更新(PUT/PATCH)和删除(DELETE)数据。请参阅文档。
安装
下载包
composer require robinmarechal/laravel-rest-api
Laravel >= 5.5
该包使用Laravel的自动发现功能。因此,服务提供者会自动加载。
Laravel <= 5.4
将RestApiServiceProvider添加到您的应用提供者列表中,在文件config/app.php中
'providers' => [ //... RobinMarechal\RestApi\RestApiServiceProvider::class, ]
最终步骤
使您的父控制器类(默认为app/Http/Controllers/Controller.php)使用RobinMarechal\RestApi\HandleRestRequest特质。
<?php namespace App\Http\Controllers; // ... use RobinMarechal\RestApi\Rest\HandleRestRequest; class Controller extends BaseController { // ... use HandleRestRequest; }
如果您想创建具有自定义处理的自定义路由,您可能需要在子控制器中访问请求。因此,您应该在Controller父类中添加一个构造函数,如下所示
<?php namespace App\Http\Controllers; // ... use RobinMarechal\RestApi\Rest\HandleRestRequest; class Controller extends BaseController { // ... use HandleRestRequest; protected $request; function __construct(\Illuminate\Http\Request $request) { $this->request = $request; } }
准备您的API
安装包后,您只需创建所需的架构。对于数据库中的每个表(除关联表外),您需要创建一个Controller和一个Model。
API控制器位于app/Http/Controllers/Rest/,模型位于app/。
控制器名称应为表名,以驼峰式命名并在复数形式中。模型名称应为表名,以驼峰式命名并在单数形式中。
例如,如果您有一个posts表,您应该在app/Http/Controllers/Rest/中有一个名为PostsController的控制器,在app/中有一个名为Post的模型。
当然,所有这些都可以自定义,您只需使用php artisan vendor:publish命令发布rest配置以覆盖默认值即可
但有一个命令可以做到这一点!
我创建了一个Artisan命令,可以帮助我们创建这些控制器和模型。要为数据库表创建控制器和模型,只需执行以下命令
php artisan api:table <table_name|model_name> [--F|fillable=] [--H|hidden=] [--D|dates=] [--T|timestamps=] [--softDeletes] [--R|relations=] [--M|migrations]
--fillable=(或-F)选项接受一个字段列表,字段由逗号(,)分隔,表示模型的fillable字段值。--hidden=(或-H)选项接受一个字段列表,字段由逗号(,)分隔,表示模型的hidden字段值。--dates=(或-D)选项接受一个字段列表,字段由逗号(,)分隔,表示模型的date字段值。--timestamps=(或-T)选项是一个布尔值(1|yes|true|或0|no|false),表示模型的timestamps字段值。--softDeletes=选项是一个布尔值(1|yes|true或0|no|false)。如果值为1、yes或true,则你的模型将使用 softDeletes。--relations=(或-R)选项是一个以逗号(,)分隔的关系列表。一个“关系”是一个字符串,可以采取两种形式<hasMany|hasOne|belongsTo|belongsToMany> <related_model> [<function_name>],其中function_name允许你定义自定义函数名称。<function_name>。这种形式创建了一个空函数。如果你想要使用除这里支持之外的其他关系方法,这可能很有用。
--migrations(或-M)选项与模型控制器一起创建迁移。
注意:如果你没有指定函数名称选项(<function_name>),则名称将是你相关模型(<related_model>)在蛇形命名法下的名称,对于 hasMany 和 belongsToMany 方法为复数形式,对于 hasOne 和 belongsTo 方法为单数形式。
示例
php artisan api:table posts --fillable=title,content,user_id --relations="belongsTo User author, hasMany Comment"
重要:不要忘记为 --relations 选项添加引号!
此示例将创建以下文件
控制器
app/Http/Controllers/Rest/PostsController.php
<?php namespace App\Http\Controllers\Rest; class PostsController extends ApiController { }
模型
app/Post.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { public $timestamps = true; protected $fillable = ['title', 'content', 'user_id']; public function author(){ return $this->belongsTo('App\User'); } public function comments(){ return $this->hasMany('App\Comment'); } }
一旦为 users 和 comments 表完成相同的操作,你就可以使用你的 REST API 了。例如,你可以调用以下 URL
http://myserver.com/api/users http://myserver.com/api/posts http://myserver.com/api/comments http://myserver.com/api/posts/4 http://myserver.com/api/posts/4/author http://myserver.com/api/posts/4/comments http://myserver.com/api/posts/4/comments/3
但这还不是结束!
此包的优势在于它允许你编写更复杂的 API 调用来检索特定数据,甚至可以使用 POST、PUT/PATCH 和 DELETE 请求。请参阅文档。