如何处理REST API上的急切加载

时间:2017-02-08 08:40:36

标签: php angularjs rest laravel-5

想象一下,您拥有以下资源,例如:用户帖子评论(在laravel中设置典型关系)。

获取单个帖子时,您将拥有以下端点

GET / api / posts / 1

// With route model binding
public function show(Post $post)
{
   return $post;
}

如果我只想要Post对象,这很好,但在我的应用程序的某些页面中,我还需要加载与帖子关联的用户评论

你们如何处理这种情况?

1。我应该加载该端点中的所有内容,例如:

return $post->load(['user', 'comments.user']);

并称它为一天? (没)

2。我是否应该接受一个额外的参数来告诉我的控制器根据该值加载关系?

// With route model binding
public function show(Request $request, Post $post)
{
    // rel for "relationship"
    if ($request->has('rel')) {
        $post->load($request->input('rel'));
    }

     return $post;
}
用这种方法,我可以这样做:
GET / api / posts / 1?rel = user
返回发布用户

或者我可以使用jquery的$ .param(['user','comments.user'])构建一个参数数组

获取/api/posts/1?rel%5B%5D=user&rel%5B%5D=comments.user
使用User + Comments.User

返回Post

但任何人都可以轻易搞乱'rel'参数,所以我也需要检查一下 ¯\(°_O)/¯

3. 只需为每个特定要求创建新的端点。 (对于上面的示例,您的端点应该是什么样的?)。

当我遇到这个陷阱时,我正在为我的内部项目构建一个使用Angular + Laravel(只是一个自我消耗的API)的SPA。第二种方法是我目前用于基本提取的方法,我使用第三种方法来处理更复杂的需求。

赞赏任何意见。

0 个答案:

没有答案