REST的URI反映资源关系?

URI of REST to reflect relationship of resources?

我知道一些name conversions of REST API,例如资源名称应该是复数,使用具有相同 URI 的不同 HTTP 方法对该资源执行不同的操作等

但是由于URI 应该反映资源关系,我有点困惑。以 SO 为例,当更新答案的现有评论时,URI 应如下所示:

PUT /{contextPath}/questions/{questionId}/answers/{answerId}/comments/{commentId}

但是我在使用这个 so-called standard URI 时感觉很尴尬,因为:

  1. 有点冗长,尤其是当层次结构很 深的。
  2. questionId 和 answerId 在这里完全没有必要,因为 commentId足以让服务器识别一条评论记录。

那么处理这个问题的合适方法是什么?当资源的关系层次很深时,我应该始终遵循名称转换,还是进行一些更改?

它为您提供了更多选项,而无需提出额外的要求。

因此允许您调用可能需要说出 questionId 的函数。 当您只有 commentId 时,您必须先查询您的 questionId。

取决于您的功能要求。如果您在上一页中有特定信息并且必须在下一页中再次使用它,为什么要查询两次?除非它很敏感,而 questionId 显然不是。

这就是我对您应该如何看待标准的添加的看法

我非常不同意"URI should reflect relationship of resources"。

URI 是指向资源的指针。而已。有使它们易于阅读的约定,因此更易于使用。关系应该在 URI 路径上建模当然没有硬性规定。随意以平面而非分层方式对资源建模。使用 links 对资源之间的关系进行建模,并使用查询参数来缩小集合范围。

我会将 route/URI 简化为:

 PUT /comments/{commentId}

连同相应的 RequestBody,可能是某种 DTO。 URI 不应该从上下文路径一直显示层次结构。可以是能唯一标识资源的最短URI