如何定义哪个资源是顶级Rest资源(URI没有嵌套在任何父级内)?
我的问题来自这样一个事实:如果我从字面上理解资源层次结构的概念,我最终会获得非常长的URI,例如5或6级深度。
这违反了REST简单原则,而且,链中的所有ID都是唯一的,因此可以简化/缩短。此外,像Twitter或Facebook这样的大型REST apis,不按字面意思遵循层次结构规则。
答案 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看不知道它们都识别出一个网络服务,以帮助预测一群山羊的产奶量。)
层次结构的来源是:
特别是在后者中,层次结构非常有用。
在这种情况下,如果要建模一组资源,这些资源具有5,6或14级深度的层次关系,那么具有5,6或14级深度的URI非常有用。而不是其他。
在这种情况下,它不违反任何简单原则:
..
作为相对URI引用非常简单,无论是从1级深入到0级,还是从43级深入到42级。./programming/
作为相对URI引用非常简单,无论是从0级深入到1级,还是从42级深入到43级。编辑:
相反,虽然没有理由担心深层次的等级,但也没有理由感到对他们的感激。如果您在/a/b/c
处将资源包含为/d
的复合资源更有用,那么很好。也可以同时执行这两个操作,/a/b/c/d
和/e
都标识相同的资源(另一个301将导致更好的缓存行为并使关系显式)。