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
请求。请参阅文档。