RESTful 资源层次结构

标签 rest uri

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

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

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

最佳答案

REST 中没有层级规则。

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

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

层次结构的用处是:

  1. 如果服务器已告诉客户端如何构建 URI(例如,要在客户端上执行的 html 表单、JavaScript 或描述如何构建 URI 的其他格式)。
  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 都同样不透明,因此也同样简单:它们都是可以比较彼此是否相等的字符串,仅此而已。

编辑:

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

关于RESTful 资源层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21142158/

相关文章:

spring - 404 请求资源未找到

rest - Firebase 数据库 REST 使用 orderBy 值和参数获取

rest - 如何定义不使用 REST GET 查询参数的 Angular 资源?

android - 如何在android中获取图像资源的uri

ruby - ERROR URI::InvalidURIError: Bad URI(is not URI?) 因为浏览器

android - 驻留在 Android 动态 'on-demand' 功能模块中的原始资源无法作为 URI 引用

rest - 无法通过 OAuth 使用 Magento REST API

java - 用于解密 GZIP 正文的 Rest Api

c# - Uri规范化压缩FTP方案

java - Android - startActivityForResult 用于获取文件路径