REST API 访问 Self/Own 对象的最佳实践
REST API Best Practice For Accessing Self/Own Objects
假设我正在创建一个日记应用程序,我希望用户能够 post 进入他们的日记。
我永远不会允许用户(甚至版主)post 在其他人的日志中添加条目。
也就是说,是否有关于在我的端点路径中公开帐户或日志 ID 的任何论据?
我认为 POST api/journals/postEntry
就足够了,因为我可以通过访问令牌或 JWT 令牌确定用户。
谁能想到在路径中提供 journalId 的论点?例如:POST api/journals/{user journalId}/postEntry
Can anyone think of arguments for providing the journalId in the path? EX: POST api/journals/{user journalId}/postEntry
简答:这违反了统一接口约束。
实际上,您正在做的是创建世界的这个小角落,您不是使用 target-uri 来标识资源,而是使用 target-uri + 令牌。
这意味着您的东西没有使用世界上通用组件所期望的语义。
例如,当我从我的用户代理中复制 URI 并与其他人共享时,其他人没有得到我期望的结果——他们最终会查看 他们的 观点,不是我的。
事实上,我们可以在电子邮件中添加一个 URI 并让它只对阅读电子邮件的人有效,这在采用故事中是一个非常重要的部分。
此外,REST 中的 cache constraint 更依赖于能够将标识符用作主缓存键。所以你定制的身份机制有可能搞乱缓存。
实践:您正在使用 HTTP,并且 HTTP 具有 prohibit sharing authenticated 请求的缓存规则。所以上面提到的缓存问题纯属理论
您可能会考虑的备选方案
- 你可以安排
/api/journals/postEntry
到 redirect 到 /api/journals/{userJournalId}/postEntry
- 您可以使用 Content-Location header 来指示当前表示有更具体的标识符。
- 您可以使用 canonical link relation 帮助客户从备选资源导航到首选资源。
假设我正在创建一个日记应用程序,我希望用户能够 post 进入他们的日记。
我永远不会允许用户(甚至版主)post 在其他人的日志中添加条目。
也就是说,是否有关于在我的端点路径中公开帐户或日志 ID 的任何论据?
我认为 POST api/journals/postEntry
就足够了,因为我可以通过访问令牌或 JWT 令牌确定用户。
谁能想到在路径中提供 journalId 的论点?例如:POST api/journals/{user journalId}/postEntry
Can anyone think of arguments for providing the journalId in the path? EX: POST api/journals/{user journalId}/postEntry
简答:这违反了统一接口约束。
实际上,您正在做的是创建世界的这个小角落,您不是使用 target-uri 来标识资源,而是使用 target-uri + 令牌。
这意味着您的东西没有使用世界上通用组件所期望的语义。
例如,当我从我的用户代理中复制 URI 并与其他人共享时,其他人没有得到我期望的结果——他们最终会查看 他们的 观点,不是我的。
事实上,我们可以在电子邮件中添加一个 URI 并让它只对阅读电子邮件的人有效,这在采用故事中是一个非常重要的部分。
此外,REST 中的 cache constraint 更依赖于能够将标识符用作主缓存键。所以你定制的身份机制有可能搞乱缓存。
实践:您正在使用 HTTP,并且 HTTP 具有 prohibit sharing authenticated 请求的缓存规则。所以上面提到的缓存问题纯属理论
您可能会考虑的备选方案
- 你可以安排
/api/journals/postEntry
到 redirect 到/api/journals/{userJournalId}/postEntry
- 您可以使用 Content-Location header 来指示当前表示有更具体的标识符。
- 您可以使用 canonical link relation 帮助客户从备选资源导航到首选资源。