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

Jan*_*ard 5 rest resources interface http

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

编辑:Roy Fielding的" REST API必须是超文本驱动的 "非常有趣.我必须承认,我并不完全理解罗伊·菲尔丁实际上在谈论什么 - 由于我当然的无知 - 但这似乎与我的问题有关.

out*_*tis 2

Fielding 在选择标识符方面没有太多的说法。

5.1.5 统一接口

REST 架构风格与其他基于网络的风格的主要区别在于它强调组件之间的统一接口。[...] REST 由四个接口约束定义:资源标识[emph. 添加]; 通过代表操纵资源;自我描述性消息;并且,超媒体作为应用程序状态的引擎。

5.2.1.1 资源和资源标识符

REST 使用资源标识符来标识组件之间交互所涉及的特定资源。[...] 分配资源标识符(使得可以引用资源)的命名机构负责随着时间的推移维护映射的语义有效性(即,确保成员函数不改变)。

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

这似乎符合“ Cool URIs Don’t Change ”的要点,即虽然标识符和资源的特定配对可能会发生变化,但标识符本身在创建后应该始终存在。Fielding 关于标识符的另一点是它们应该呈现一个统一的接口。HTTP URL 实现这一点的部分原因在于它们的分层性质(至少,它们应该是分层的)。然而,URI 通常不必是分层的。

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

您正在阅读的这本书提出了专门用一章来选择标识符的原因:

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

更多的选择带来更多的工作。如果标识符是僵化的,提供的选择很少,那么您需要考虑的就更少了。此外,由于 URI 如此明显,并且您将不得不在很长一段时间内接受您的选择,因此您最好对它们进行一些思考。