什么是嵌套资源,它们来自何处?

问题描述

对于我的论文,我需要精确定义子资源(或嵌套资源)。 我读过Fieldings Disseration,他确实介绍了术语资源和资源标识符,但是他没有介绍术语子资源。

这是子资源的示例,但为什么呢?

/posts/:postId/comments/:commentId

那么,一个任意帖子实例可以有一组注释,但是该帖子实例应该用path参数表示为子资源还是可以硬编码?

假设我有一个类似的

/account/status

状态属于该帐户。它是子资源吗?

预先感谢

授予

解决方法

REST中没有子资源的概念。每种资源都独立存在,并且uri应当是不透明/不相关的,除非出于美学和文档目的。您应该能够将资源的位置更改为其他名称,甚至更改为其他服务器,并且不会影响这种关系。

资源之间的关系不是由它们的uri定义的,而是由它们之间的链接定义的(在本文中称为超媒体关系)。

该链接的外观取决于格式。在HTML中,它看起来像:

<a href="/child" rel="item">...</a>
<a href="/parent" rel="collection">...</a>

编码为HTTP链接:

Link: rel="item"; </child>

编码为HAL:

{
  _links: {
     item: { href: '/child'}
  }
}
,

具有“下属”的资源是旧的HTTP / 1.0概念,请参见RFC 1945

POST方法用于请求目标服务器接受请求中包含的实体作为请求行中Request-URI标识的资源的新下属。

发布的实体从属于该URI,其方式与文件从属于包含该URI的目录,新闻文章从属于其发布的新闻组或记录从属于数据库的方式相同。 / p>

您会发现该语言已被延续到HTTP / 1.1(RFC 2616)中,但在最新的规范中已被废弃(请参见RFC 7231)。


如果您要查找“子资源”或“嵌套资源”的“权威”定义,则需要研究旨在支持通用 routing 的标识符拼写约定要求。例如JaxRSRails

在逻辑上通常是其他资源的子资源...。嵌套路由可让您在路由中捕获这种关系。

这些纯粹是实现细节,因为它们位于原始服务器提供的HTTP门面之后。通用客户不了解这些设计约束,因此不会从中受益。例如,如果您查看当前的HTTP缓存规范,则会注意到invalidating资源对可能也在缓存中的任何“子资源”完全没有影响。

但是选择将机械hierarchical part与逻辑资源层次结构对齐的URI设计意味着您可以将资源像对象图一样对待,在某些情况下这将减轻维护负担。


仅仅因为整个混乱还不够混乱,我们还想到了secondary resources

URI的片段标识符组件允许通过引用主资源和其他标识信息来间接标识辅助资源。

此处的主要思想是,辅助资源的表示包含在主要资源的表示中。想想“网页内的HTML表单”。

,

子资源是您调用的任何包含嵌套结构的内容,例如,如果您的帖子对象包含嵌套的注释对象,则可以说出注释是帖子的子资源,请想一想作为可以在其中包含对象的资源(对象)的层次结构。

post = {   #main resource at /post/:post
 "post_id": "001","comments": { #sub-resource at /post/:post/comment/:comment
       "comment_id": "001"
        },...
}

现在已经澄清了,这完全取决于您在应用程序内部设置资源层次结构,这样您最终可能会得到很多子资源,或者根本没有子资源。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...