REST的URI反映资源的关系?

时间:2016-05-17 14:01:17

标签: rest url uri restful-url

我知道一些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足以让服务器识别评论记录。
  3. 那么处理这个问题的适当方法是什么?我应该始终遵循名称转换,还是在资源的关系层次非常深时进行一些更改?

3 个答案:

答案 0 :(得分:2)

我强调不同意" URI应该反映资源的关系"。

URI是指向资源的指针。就是这样。有些惯例使它们具有人类可读性,因此更易于使用。当然没有硬性规则可以在URI路径上建模关系。您可以随意以平面而非分层的方式对资源进行建模。使用link来建模资源之间的关系,并使用查询参数来缩小集合范围。

答案 1 :(得分:1)

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

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

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

这就我应该如何看待你的标准

的添加意见而言

答案 2 :(得分:1)

我会将路由/ URI简化为:

 PUT /comments/{commentId}

以及相应的RequestBody,也许是某种DTO。 URI不必从上下文路径一直显示层次结构。它可以是唯一标识资源的最短URI