我对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中提取它们)
感谢您提供任何反馈意见,如果我的问题太模糊或无关紧要,请与我联系。
答案 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>
会退回我朋友的帖子。
注意:在所有情况下,返回的所有帖子都是允许看到的帖子