rest - 访问自己/自己的对象的 REST API 最佳实践
问题描述
假设我正在创建一个日记应用程序,并且我希望用户能够将条目发布到他们的日记中。
我不打算让用户(甚至是版主)在其他人的日记中发布条目。
也就是说,是否有任何论据可以在我的端点路径中公开帐户或日志 ID?
我认为POST api/journals/postEntry
这就足够了,因为我可以通过访问令牌或 JWT 令牌来确定用户。
谁能想到在路径中提供 journalId 的论点?前任:POST api/journals/{user journalId}/postEntry
解决方案
谁能想到在路径中提供 journalId 的论点?例如:POST api/journals/{user journalId}/postEntry
简短的回答:这违反了统一接口约束。
参见菲尔丁,2000 年。
实际上,您所做的是创建世界的这个小角落,而不是使用 target-uri 来识别资源,而是使用 target-uri + token。
这意味着你的东西没有使用世界上通用组件所期望的语义。
例如,当我从我的用户代理中复制 URI 并与其他人共享时,其他人不会得到我期望的结果——他们最终看到的是他们的视图,而不是我的视图。
我们可以在电子邮件消息中粘贴一个 URI 并让它只为阅读电子邮件的人工作这一事实是采用故事中的一个非常重要的部分。
此外,REST 中的缓存约束更依赖于能够将标识符用作主缓存键。因此,您定制的身份机制有可能会破坏缓存。
实践中:您正在使用 HTTP,并且 HTTP 具有禁止共享经过身份验证的请求的缓存规则。所以上面提到的缓存问题纯粹是理论上的。
您可能会考虑的替代方案
- 您可以安排重定向
/api/journals/postEntry
到/api/journals/{userJournalId}/postEntry
- 您可以使用Content-Location标头来指示当前表示存在更具体的标识符。
- 您可以使用规范链接关系来帮助客户从备选方案导航到首选资源。
推荐阅读
- kotlin - 算法 -PermMissingElem 在大范围内失败
- sql - SQL比较两个不同表的相同列
- php - 如何在 WP 中将 get_col 作为数组并在函数中使用它?
- swift - Apple TV:带有键盘和过滤器的搜索栏
- snowflake-cloud-data-platform - 使用具有系统管理员角色的 RESOURCE_MONITOR 创建仓库时出现雪花错误
- mysql - mysql数据转储中的KEY
- sql-server - 将 Excel SQL 编码到 VBA - 连接字符串问题
- python - Pyspark > Dataframe,将多个数组列分成多行,每行一个值
- javascript - 如何使用 ES6 获取对象数组中的第一个对象的元素
- javascript - BiQuadFilter playing filtered audio but MediaRecorder records un-filtered raw audio stream - WebAudio API