为什么资源的标识对RESTful Web服务的接口如此重要?

时间:2011-01-28 11:12:00

标签: http rest interface resources

我正在阅读RESTful Web Services Cookbook,有一章关于资源的识别。作者强调了识别过程的重要性。为什么这么重要?

编辑:罗伊菲尔丁的“REST APIs must be hypertext-driven”非常有趣。我必须承认,我并不完全理解罗伊·菲尔丁实际上在谈论什么 - 由于我当然的无知 - 但这似乎与我的问题有关。

2 个答案:

答案 0 :(得分:2)

菲尔丁在选择标识符方面没什么可说的。

5.1.5 Uniform Interface

将REST架构风格与其他基于网络的样式区分开来的核心功能是强调组件之间的统一接口。 [...] REST由四个接口约束定义:资源识别 [emph。添加];通过陈述来处理资源;自我描述性的信息;并且,超媒体作为应用程序状态的引擎。

5.2.1.1 Resources and Resource Identifiers

REST使用资源标识符来标识组件之间交互中涉及的特定资源。 [...]分配资源标识符的命名权限,使得引用资源成为可能,负责维护映射随时间的语义有效性(即,确保成员函数不会更改)。

传统的超文本系统通常在封闭或本地环境中运行,使用每次信息更改时都会更改的唯一节点或文档标识符,依赖于链接服务器来维护与内容分开的引用。由于集中式链接服务器是对Web的巨大规模和多组织域要求的诅咒,因此REST依赖于作者选择最符合所识别概念性质的资源标识符。当然,标识符的质量通常与保留其有效性所花费的金额成正比,这导致链接断开,因为短暂(或支持不良)的信息随着时间的推移而移动或消失。

这似乎符合“Cool URIs Don't Change”的要点,虽然标识符和资源的特定配对可能会发生变化,但标识符本身在创建后应始终存在。菲尔丁关于标识符的另一点是它们应该呈现统一的界面。 HTTP URL部分地通过它们的层次性来实现这一点(至少,它们应该是分层的)。但是,URI通常不必是分层的。

统一接口和分层标识符可以简化主服务器功能之一:将标识符映射到资源。最简单的是,当执行的映射是将文档根目录添加到请求URI时,表示存储在与标识符相同的层次结构中,尽管Web服务很少使用简单映射。

您正在阅读的书中提出了自己选择章节来挑选标识符的原因:

  

在设计RESTful Web服务的所有方面,例如资源识别,媒体类型和格式的选择以及统一界面的应用,资源识别是最灵活的部分。

随着更多的选择,更多的工作。如果标识符很严格,提供的选择很少,那么你就没那么多考虑了。此外,由于URI是如此明显,并且您将不得不忍受很长一段时间的选择,您最好还是考虑一下。

答案 1 :(得分:1)

我认为强调它的部分原因是因为它与许多当前的分布式应用程序设计背道而驰。因为在REST中你的界面(动词)是明确定义的(如果我们正在谈论的是HTTP动词),剩下的工作就是识别资源。

标识资源(URI)也会影响缓存 - 如果您对缓存感兴趣,则需要以允许缓存重复访问的,不经常更改的资源的方式分解资源。

在不遵循统一界面的其他体系结构中,可能不太强调资源的识别,因为人们也在对资源进行不同的操作。