Php 什么是';正确的道路';是否授权此REST API请求?
我正在构建一个restapi,我坐在这里有一个问题。我决不是这方面的专家,所以我想学习如何以“正确的方式”(或者至少以有意义的方式)处理REST架构 我正在构建一个具有角度前端和基于laravel的RESTfull后端API的web应用程序。该应用程序有以下3个表格:相册、帖子和评论。如果用户是相册的成员,则可以在相册中撰写帖子 用户可以被邀请成为相册的成员,然后查看它的所有帖子和这些帖子的评论。如果用户不是(被邀请成为)相册的成员,则不能对该相册中的帖子发表评论 换句话说:如果用户对帖子发表评论,帖子必须来自用户所属的相册 我的困境是:如何检查/授权此请求? 我雄辩的人际关系如下:Php 什么是';正确的道路';是否授权此REST API请求?,php,api,rest,laravel,Php,Api,Rest,Laravel,我正在构建一个restapi,我坐在这里有一个问题。我决不是这方面的专家,所以我想学习如何以“正确的方式”(或者至少以有意义的方式)处理REST架构 我正在构建一个具有角度前端和基于laravel的RESTfull后端API的web应用程序。该应用程序有以下3个表格:相册、帖子和评论。如果用户是相册的成员,则可以在相册中撰写帖子 用户可以被邀请成为相册的成员,然后查看它的所有帖子和这些帖子的评论。如果用户不是(被邀请成为)相册的成员,则不能对该相册中的帖子发表评论 换句话说:如果用户对帖子发表评
- 用户表与相册具有多对多关系
- 相册有很多帖子
- 帖子有很多评论
- 相册\u id(帖子所在的相册)
- post_id(用于正在评论的帖子)
- 正文(实际注释本身)
// Validate the Request Body
$input = $this->request->only([ 'album_id', 'post_id', 'comment' ]);
$validator = Validator::make( $input, [
'album_id' => 'required|integer',
'post_id' => 'required|integer',
'comment' => 'required',
]);
// Authorize the Request
$albumIdList = Auth::user()->albums()->get()->pluck('id')->toArray();
$postIdList = Post::whereIn( 'album_id', $albumIdList )->select('id')->get()->toArray();
if( ! in_array($this->request->get('post_id'), $albumIdList))
return abort(403);
// Store the new comment
$comment = Comment::create([
'user_id' => Auth::user()->id,
'post_id' => $input['post_id'],
'comment' => $input['comment'],
]);
return $comment;
我认为这是正常工作,但如果一张专辑有1000个帖子呢?为服务器构建包含所有post ID的阵列变得非常密集。。。专业公司(如Facebook、Twitter、Pinterest)如何在其web应用程序中解决这一问题
提前谢谢 您正在查找和存在的方法:
$allowed=Auth::user()->albums()->whereHas('post',function($query){
$query->where($this->request->only('post_id'));
})->存在();
此外,没有理由传入相册\u id
。您的代码可以简化为:
$this->validate($this->请求)[
'post_id'=>'必需|整数',
'注释'=>'必需',
]);
$allowed=Auth::user()->albums()->whereHas('posts',函数($query){
$query->where($this->request->only('post_id'));
})->存在();
如果(!$允许),返回中止(403);
$input=$this->request->only('post_id','comment');
返回Comment::create($input+['user_id'=>Auth::id());
如果你想进一步清理这件事,你应该看看拉威尔的