Web Services Laravel中非CRUD操作的REST API设计与实现

yiytaume  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(113)

用户资源具有namestatus属性和许多其他字段。用户可以更新其name,但只有管理员用户可以更新status
在典型的rest设计中,name更新可以

patch
/users/123
{
  name:"John"
}

路线将

Route::apiResource('users',UserController::class);

在这里,修补程序请求将调用UserController类的update方法
同样,status更新也是一个补丁请求,它调用UserController类的update方法。
现在的情况是,从业务逻辑的Angular 来看,这两个更新是不同的操作,但从REST设计来看,可以用于这两个操作的是同一个补丁请求。
所以我的问题是
1.正如我上面所说的,我们有相同的控制器操作update将被调用用于这两个操作。
1.我对REST的理解正确吗?
注意:请不要告诉我status是一个资源,在这种情况下,想象一下,如果该用户的每个属性都有不同的业务逻辑要在更新之前完成。那么,每个属性都是一个资源吗?
好奇地等待建议
谢谢您

bxfogqkk

bxfogqkk1#

您的理解是正确的,但从我的Angular 来看,这仍然是两个端点:

PATCH /current/user {"name": "John"}
PATCH /users/123 {"status": "deceised"}

向代码中添加访问控制,如下所示:

  • 如果用户是管理员,则一切正常
  • 否则,如果用户尝试编辑自己的配置文件,并且不尝试更改status属性,则一切正常
  • 否则401

你应该能够根据文档来做这件事。https://laravel.com/docs/5.1/authorization我不使用Laravel,但是在阅读了1分钟之后,我认为你需要添加一个策略,在那里你可以放置上面的if-else语句,仅此而已。

相关问题