InfoQ

新闻

RESTful世界里的Cool URI

作者 Thomas Bandholtz译者 王锐 发布于 2008年4月16日 上午6时51分

社区
SOA
主题
语义网,
REST
标签
W3C,
Web 2.0,
Mashup,
协作技术,
RDF,
标准化
假想一下,如果要以最小的集成代价实现一个分布在全世界范围的信息空间,用它来共享机器可识别的数据,会怎么样?这是关于REST的吗?不是的。根据 SWEO 的说法,这跟语义网有关。那些Cool URI有助于实现这种方式。所以,去看看RESTful SOA URI是不是也很“酷”可能是值得的。

语义网教育和拓展兴趣组织(Semantic Web Education and Outreach ,简称SWEO)在3月底执照到期。它的最后一个产品是一个W3C的关于Cool URIs for the Semantic Web的备忘录。URI能很酷吗?这里引用Tim Berners-Lee从1998年开始发表的一篇早期文章 (当时他还没有‘Sir’这一头衔)
“什么使URI很酷?
一个很酷的URI是一个不会变的URI。
URI会怎么变?
URI本身不变:是人改变了它们。”
现在Cool URI没有那么简单了。2005年,经过旷日持久的对“HTTP解除引用(dereference)功能范围”(httpRange-14)的辩论之后,W3C技术体系架构组(Technical Architecture Group ,简称TAG)最后决定“如果得到的HTTP响应代码是200(成功获取),这表示这个URI的确是标识了一个信息资源,但是如果没有得到这个响应,或者得到了一个不同的代码,就不能做这样的假设”,这与2005年的TBL总结一致。目前的SWEO备忘录参考了一个更详细的、由Roy T. Fielding发表的文章
a)如果一个“http”资源对一个GET请求的响应码是2xx,那么被那个URI标识的资源是一个信息资源;
b)如果一个“http”资源对一个GET请求的响应码是303(See Other),那么被那个URI标识的资源是任何资源;
c)如果一个“http”资源对一个GET请求的响应码是4xx(错误),那么这个资源被认为是未知的。

Fielding几乎是REST体系架构的同义词。然而在RESTful SOA中几乎很难看出httpRange-14的决定。例如,无论是在Mark Bakers的“hypermedia constraint”,还是在Anne Thomas Manes的“REST is about Resources”中都没有。

RDF表示资源描述框架(Resource Description Framework),它“允许使用者以一种计算机可处理的方式来描述现实世界的Web文档和概念--人、组织、话题、事物。在Web上发布这些描述,创建语义网。” 同时出现人类可读的Web文档--也可以叫做“信息资源”--与计算机可处理的描述符或者语义概念引起了与HTTP URI代表什么有关的二义性问题。http://www.example.com/people/alice 是代表Alice的设计完美的主页,还是代表一些RDF编码的Alice元数据?它能否也像一个vCard、一个FOAF记录、或者一些HR数据集一样后跟任何公司特定模式(schema)?

这种问题已经超出了协议无关的URI语法的范围,这得由HTTP协议提供内容协商作 为解决方案。HTTP客户端可以用自己喜欢的数据格式和语言,在请求的头部追加目标URI来传送。内容提供者应该提供这些设置服务。SWEO备忘录提供了 一个解决方案,这个解决方案为每一种数据格式实现了一个独立的URI,另外还有一个“通用的”URI。尽管通用URI可以重定向到其中的一个,但是如果必 要,它还允许根据运行时HTTP请求中的‘Accept’设置,直接从多种格式中选择中意的格式。同时,一份更详细的Apache HTTP Server 最佳实践也已发布了。

RESTful SOA可能会认为,这主要适合那些固定文档。一个动态的SOA服务器能够很容易的实现这个“通用”URI概念而无需任何重定向,它只需把请求格式的内容按需提供即可。这个观点对于内容提供来说是正确的,但是重定向体系架构对链接和引用支持更好。这也利用了资源管理和治理,语义网中是这样,RESTful SOA中也是这样。或许,这两个应用领域根本就不能泾渭分明的划清界限。

查看英文原文Cool URIs in a RESTful World

.

没有回复

回复

独家内容

剖析短迭代

敏捷教练Dave Nicolette提出:我们应该如何设定迭代长度?是要根据发布周期的时间么?使用短迭代又有哪些好处?

应用JSF、Ajax和Seam开发Portlets(1/3)

本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。

AtomServer:数据分发的发布动力(第二部分)

在这篇文章里,Bryon Jacob和Chris Berry将和我们继续探讨AtomServer,它是基于Apache Abdera的完整Atom存储实现。作者还创建了几个Atompub规范扩展,其中包括自动标记、批处理和Feeds聚合。

架构师(试刊第二期)

InfoQ中文站的电子杂志《架构师》试刊第二期出版了!相比于上期,我们在内容的选择安排和版式上都根据读者的意见重新做了修正。“细节决定成败”,我们希望基于InfoQ中文站的专业内容,《架构师》能逐渐成为大家喜欢的电子刊物!

一种正规的性能调优方法:基于等待的调优

在本文中,Steven Haines探讨了Web应用性能调优问题。该领域过去更像是一门艺术而不是一门科学。他提出了一种称为基于等待调优的方法,使整个调优过程更加可度量,也因此更具科学性。

Java程序员ActionScript 3入门

通常来说,改变技术路线时最艰难的部分是辨别语言语法之间的不同。这篇文章就为Java开发者提供了一份如何转向Flex基础语言ActionScript的指南。

浅谈如何创建Rails应用

本视频主要以财帮子为例,介绍了如何创建一个PV为百万级的Rails应用。其中包括:Rails应用的服务器架构、Rails Cache的优化、负载均衡的处理、Web服务器的调试、分布式解决方案、Open API的设计等等。

Alexandru Popescu谈InfoQ.com网站架构

InfoQ首席架构师Alexandru Popescu在采访中谈论了InfoQ架构、Webwork与DWR、Hibernate与JCR、Hibernate可扩展性、最新的InfoQ视频流系统和InfoQ的未来规划。