malhal/laravel-restapi

一个控制器和处理程序,让您轻松构建REST API

v1.0.0 2016-09-19 15:32 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:58:30 UTC


README

一个控制器和处理程序,让您在Laravel中轻松构建使用精细粒度CRUD资源的REST API。它还提供了使用Laravel内置异常处理的一致性错误响应。

首先,在你的模型中想要使用之前,确保添加一个$fillable参数,包括所有通过API方法填充的字段,例如:

protected $fillable = ['name', 'formattedAddress', 'latitude', 'longitude'];

注意这一点很重要,因为它还用于在不需要时隐藏这些字段。例如,当创建记录时,我们不希望将数据发送回客户端。从数据库中反映这些字段将更加复杂,所以我们简单地利用这个属性。

然后,创建一个继承自RestController的控制器子类,例如VenueController

use Malhal\RestApi\RestController;

class VenueController extends RestController
{

}

最后,在你的api.php路由文件中添加

Route::resource('venue', 'VenueController',  ['except' => [
    'create', 'edit'
]]);

现在您可以通过POST到api/venue创建地点,通过PUT替换它,或通过PATCH更新它。您还可以使用GET进行查询,或通过api/venue/1获取单个记录。

作为额外的奖励,为了支持批量更新,请添加

$this->post('batch', '\Malhal\RestApi\RestController@batch');

并提交一个包含请求数组的JSON,如下所示

{
    "atomic" : true,
    "requests":
    [
        {
            "url" : "api/venue/1000",
            "method" : "PUT",
            "body" : {
                "name" : "Test Venue"
                }
        },
        {
            "url" : "api/password",
            "method" : "POST",
            "body" : {
                "password" : "12345679",
                "venue_id" : 1000
                }
        }
    ]
}

并将原子标志设置为在请求失败时回滚。

如果您想添加验证,只需覆盖一个方法并在必要时更改查询,例如:

class PasswordController extends RestController
{
    public function index(Request $request)
    {
        $this->validateQuery($request, [
            'venue_id' => 'required|integer'
        ]);
        return $this->newModel()->where('venue_id', $request->get('venue_id'))->get();
    }

    public function store(Request $request){
        $this->validateJson($request, [
            'venue_id' => 'required|integer'
        ]);
        return parent::store($request);
    }
}

现在如果提交的密码缺失venue_id,则RestHandler将返回以下错误

{
  "error": "QueryException",
  "driverCode": "1364",
  "reason": "Field 'name' doesn't have a default value",
  "code": "HY000"
}

安装

PHP 5.6.4+和Laravel 5.3+是必需的。

要获取Laravel-RestApi的最新版本,只需使用Composer要求项目

$ composer require malhal/laravel-restapi dev-master