RESTful资源层次结构

时间:2014-01-15 15:58:50

标签: rest uri

如何定义哪个资源是顶级Rest资源(URI没有嵌套在任何父级内)?

我的问题来自这样一个事实:如果我从字面上理解资源层次结构的概念,我最终会获得非常长的URI,例如5或6级深度。

这违反了REST简单原则,而且,链中的所有ID都是唯一的,因此可以简化/缩短。此外,像Twitter或Facebook这样的大型REST apis,不按字面意思遵循层次结构规则。

1 个答案:

答案 0 :(得分:2)

REST中没有heirarchy规则。

确实恰恰相反:REST的原则是URI是不透明的,因此URI <http://example.net/careers/technical/it/computing/programming/webProgramming/asp.net>不会传达来自REST角度的信息而不是<http://example.net/fasd12>

请注意,从REST角度来看,这两个URI同样不透明。给定的过程(数字或人类思维)可能会以一种特定的方式解释前者,但在服务器另有说明之前,这种解释是不正确的(单凭URI看不知道它们都识别出一个网络服务,以帮助预测一群山羊的产奶量。)

层次结构的来源是:

  1. 如果服务器告诉客户端如何构造URI(例如html-forms,要在客户端上执行的javascript,或描述如何构建URI的其他格式)。
  2. 如果服务器使用相对URI来描述链接,则作为HATEOAS原则的一部分。
  3. 特别是在后者中,层次结构非常有用。

    在这种情况下,如果要建模一组资源,这些资源具有5,6或14级深度的层次关系,那么具有5,6或14级深度的URI非常有用。而不是其他。

    在这种情况下,它不违反任何简单原则:

    1. ..作为相对URI引用非常简单,无论是从1级深入到0级,还是从43级深入到42级。
    2. ./programming/作为相对URI引用非常简单,无论是从0级深入到1级,还是从42级深入到43级。
    3. 在给定的上下文之外,例如相对引用使用,所有URI都是同样不透明的,因此同样简单:它们都是可以相互比较的字符串,而不是别的。
    4. 编辑:

      相反,虽然没有理由担心深层次的等级,但也没有理由感到对他们的感激。如果您在/a/b/c处将资源包含为/d的复合资源更有用,那么很好。也可以同时执行这两个操作,/a/b/c/d/e都标识相同的资源(另一个301将导致更好的缓存行为并使关系显式)。