2014-01-15 127 views
1

如何定义哪个资源是顶级Rest资源(URI不嵌套在任何父级中)?REST风格的资源层次

我的问题来自这样一个事实,如果我从字面上理解资源层次的概念,最终会得到很长的URI,比如5或6个层次。

这违背了REST的简单性原则,而且,沿链的所有ID都是唯一的,所以可以简化/缩短。此外,像Twitter或Facebook这样的大型REST API,并不直接遵循层级规则。

+0

您能否提供这样一个深度嵌套的URL的例子? – 2014-01-15 16:09:25

+0

@LutzHorn创建交换对象的示例:/ brand /:bid/campaign /:cid/product /:pid/exchange /:eid 我认为如果资源在/ exchange –

+0

处可用, @LutzHorn如果你看twitter的Api,他们有短的URI –

回答

2

REST中没有规律。

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

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

凡层次进来是:

  1. 如果服务器告诉客户如何构建一个URI(如HTML的形式,将客户端,或描述如何URI的其他格式上执行JavaScript的建成)。
  2. 如果服务器使用相对URI来描述链接,作为HATEOAS原则的一部分。

特别是后者,层次结构可能非常有用。

并且在这种情况下,如果您建立的是一组资源,它们之间的层次关系是5,6或14级,则具有5,6或14级深度的URI是很有用的。而不是其他。

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

  1. ..作为相对URI引用是很简单的,无论是从1级深为0,或43倍的水平要深到42 。
  2. ./programming/作为相对URI引用是很简单的,无论是从0电平去深为1,或42级深至43
  3. 外给定上下文的诸如相对引用使用,所有的URI是同样不透明,因此也同样简单:它们都是可以相互比较的字符串ith彼此,没有别的。

编辑:

相反,尽管没有理由担心深层次,没有理由感到感激他们要么。如果将/a/b/c的资源作为复合资源包含在/d之后,则对您更有用。也可以同时执行这两个操作,其中/a/b/c/d/e都标识相同的资源(一个301到另一个会导致更好的缓存行为并使关系明确)。

+0

我不能更好地解释它。我能看到的唯一例外是[HTTP POST规范](http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5)中的“从属”概念。然而,该规范足够宽松,可以选择你想要的“从属”结构。 –

+0

@Aurélien*实体*是从属的,但是任何结果资源的URI都不需要。 POST可能会导致添加,删除或更改任何资源,包括由URI标识的资源,层次结构中较低或较高的资源,不同服务器上的一个资源,根本没有资源等。 –

+0

@Jon_Hanna你是对的,但是创建比其他情况更为详细,并且“实体从属于URI”的定义对于规范来说确实很奇怪(“就像文件从属于包含它的目录一样,新闻文章是从属的到其发布的新闻组,或者记录从属于数据库“)。不过,我同意你的观点,这种从属关系非常抽象,并不意味着URI之间的“结构”。 –