在父关系

时间:2016-10-03 06:47:32

标签: android google-app-engine google-cloud-datastore objectify

假设我有三种实体 - 用户,帖子,评论。 每个帖子都有一个父用户,每个评论都有一个父帖子,即 用户>后>评论

我的API如下所示:

这里的

键是实体的webafe密钥

GET / user / {key} - 获取用户信息

POST / user / {key} / post / - 创建帖子

获取/发布/ {key} - 获取帖子

POST / post / {key} / comment / - 创建评论

GET / comment / {key}

问题:

  1. 这里的问题是,如果user1知道user2的密钥,那么user1可以 访问user2的数据。
  2. 我在数据存储区中读到了多租户,但是对它是否感到困惑 是否适用于此类数据存储区设计。因为我有 超过100个用户,可能会增加。
  3. 我需要手动处理吗?如果是,那将是什么 最好的方法吗?

1 个答案:

答案 0 :(得分:0)

这是一个很好的,宁静的API设计(虽然流行的惯例是复数集合 - /users/{key}/posts/{key}/comments等。)

您应该明确处理授权检查。 GET /users/{key}的实现应该检查调用者是否有权查看该对象并返回HTTP 401或403.大概是调用者是由某种身份验证头确定的。

您可能正在考虑使用GET /myuserGET /myposts等替代方案。有时这可能很有用,但如果可能的话,最好避免这种情况 - 它违反了REST的精神和GET的缓存能力。此外,最好使URL不仅适用于特定用户,还允许任何超级用户代表用户执行相同的操作。这些URL需要处理显式对象。

回复:多租户。我强烈建议避免它。我不认为它特别有用,如果你是GAE的新手,那将特别令人困惑。只需为您需要的数据建模 - 如果帖子与用户相关联,则将该信息存储在帖子中并使用它来执行授权检查或过滤。