Rest API,关系和子集

时间:2013-05-01 18:10:01

标签: rest

我对Rest API和关系有一些疑问。

我知道关系的问题总是很难用Rest。

我有一些用户,帖子(由用户创建),用户之间的关系(从fb导入),帖子上的互动(由用户创建),用户可以像帖子一样。

用户可以创建一个帖子,这些帖子只有其他用户可以看到与海报有关系(最多2个跳跃,如朋友的朋友),然后可以在帖子上创建互动。

我们根据您的身份验证对后端进行过滤,然后执行魔术/帖子,这将返回您可以看到的帖子列表。

我感觉有点时髦,因为它使相同的端点(/ posts)将根据当前用户返回不同的数据集。我们当然可以传递一个参数(?viewable_by_user_id =:id)来反映它,但我想知道我是否可以做任何改进缓存的事情。

我正在考虑使用此端点将API改进为v2:

GET / PATCH / DELETE / users /:id

POST [post] / posts:创建一个帖子(使用当前的auth用户作为帖子的所有者) 要么 POST [post] / users /:id / posts:为此用户创建帖子

GET / users /:id / posts:获取用户创建的帖子

GET / users /:id / stream:用户获取帖子“可查看”(这是我正在使用的帖子) 要么 GET / posts?viewable_by_user =:id

GET / users /:id / like:获取用户喜欢的帖子 POST [post_id] / users /:id / like:喜欢帖子

POST [interaction] / posts /:id / interactions:在当前用户的帖子上创建交互 GET / posts /:id / interactions:获取帖子的互动

GET / PATCH / DELETE / interactions /:id

关于如何制作路径的任何想法都反映了这种关系? 我正在考虑为关系创建一个端点,但似乎有点复杂维护(用户不手动创建关系,我们从fb中提取它们)

感谢您提供任何反馈意见,如果我的问题太模糊或无关紧要,请与我联系。

1 个答案:

答案 0 :(得分:0)

如果你把它想象成这样:(请注意,我只是首先把“帖子”放在首位,因为它告诉了什么,然后限制就在右边。你可能喜欢另一个订单。)

GET /users/posts/<viewer>/<creator>

这给出了一些退化的案例:

GET /users/posts/<me>/<me>

获取我创建的所有帖子

GET /users/posts/<me>

获取所有其他用户的所有帖子

GET /users/posts/<me>/<stranger>

什么也不会返回,因为我不被允许看到陌生人的帖子

GET /users/posts/<me>/<friend>

会退回我朋友的帖子。

注意:在所有情况下,返回的所有帖子都是允许看到的帖子