【问题标题】:RESTful resource hierarchyRESTful 资源层次结构
【发布时间】:2014-01-16 02:38:35
【问题描述】:

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

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

这违背了 REST 的简单性原则,而且,链上的所有 id 都是唯一的,因此可以简化/缩短。此外,像 twitter 或 facebook 这样的大型 REST api,并不遵循字面上的层次结构规则。

【问题讨论】:

  • 你能提供一个这样一个深度嵌套的 URL 的例子吗?
  • @LutzHorn 示例,创建一个交换对象:/brand/:bid/campaign/:cid/product/:pid/exchange/:eid 我认为如果资源是可在 /exchange 获得
  • @LutzHorn 如果你查看 twitter Api,它们的 URI 很短

标签: rest uri


【解决方案1】:

REST 中没有层次结构规则。

实际上恰恰相反:URI 是不透明的,这是 REST 的一个原则,因此从 REST 的角度来看,URI <http://example.net/careers/technical/it/computing/programming/webProgramming/asp.net> 不会比 <http://example.net/fasd12> 传达更多信息。

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

层次结构的来源是:

  1. 如果服务器已告诉客户端如何构建 URI(例如 html-forms、要在客户端执行的 javascript 或其他描述如何构建 URI 的格式)。
  2. 如果服务器使用相对 URI 来描述链接,作为 HATEOAS 原则的一部分。

尤其是在后者中,层次结构可能非常有用。

在这种情况下,如果您要对一组彼此之间具有 5、6 或 14 层深度的层次关系的资源进行建模,那么 URI 的深度为 5、6 或 14 层非常有用。而不是其他的。

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

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

编辑:

相反,虽然没有理由害怕深层次的等级制度,但也没有理由对它们感到感激。如果将/a/b/c 的资源包含为/d 的复合资源对您更有用,那么很好。也可以两者都做,/a/b/c/d/e 都标识相同的资源(一个 301 到另一个会导致更好的缓存行为并使关系明确)。

【讨论】:

  • 我无法更好地解释它。我能看到的唯一例外是specification of HTTP POST 中的“从属”概念。但是,规范足够宽松,可以选择“从属”所需的结构。
  • @Aurélien entity 是从属的,但任何结果资源的 URI(s) 都不需要。 POST 可能导致任何资源的添加、删除或更改,包括由 URI 标识的资源、层次结构中较低或较高的资源、不同服务器上的资源、根本没有资源等。
  • @Jon_Hanna 你是对的,但是创建比其他情况更详细,并且“实体从属于 URI”的定义对于规范来说真的很奇怪(“以同样的方式文件从属于包含它的目录,一篇新闻文章从属于发布它的新闻组,或者一条记录从属于数据库”)。但是我同意你的观点,这种从属关系非常抽象,并不意味着 URI 之间存在“结构”。
猜你喜欢
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
相关资源
最近更新 更多