0

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

我知道关系问题对于 Rest 总是很棘手。

我有一些用户、帖子(由用户创建)、用户之间的关系(从 fb 导入)、帖子上的交互(由用户创建)和用户可以喜欢一个帖子。

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

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

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

我正在考虑使用以下端点将我们的 API 改进为 v2:

获取/补丁/删除 /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 : 获取帖子的交互

获取/补丁/删除/交互/:id

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

感谢您的任何反馈,如果我的问题太模棱两可或无关紧要,请告诉我。

4

1 回答 1

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>

会退回我朋友的帖子。

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

于 2013-05-01T18:20:18.290 回答