首页 / 软件开发 / JAVA / 使用Struts 2开发RESTful服务
使用Struts 2开发RESTful服务2009-11-10 ibm 李刚REST 简介REST是英文Representational State Transfer的缩写,这个术语由Roy Thomas Fielding博士在他的论文《Architectural Styles and the Design of Network-based Software Architectures》中提出。从这篇论文的标题可以看出:REST是一种基于网络的软件架构风格。提示:国内很多网络资料将REST翻译为“表述性状态转移”,不过笔者对这个翻译不太认同。因为这个专业术语无法传达REST的含义,读者可以先不要理会REST到底该如何翻译,尽量先去理解REST是什么?有什么用?然后再来看这个术语的翻译。关于Roy Thomas Fielding博士的原文参见如下地址:http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm。REST 架构是针对传统Web应用提出的一种改进,是一种新型的分布式软件设计架构。对于异构系统如何进行整合的问题,目前主流做法都集中在使用 SOAP、WSDL 和 WS-* 规范的Web Services。而REST架构实际上也是解决异构系统整合问题的一种新思路。如果开发者在开发过程中能坚持REST原则,将可以得到一个使用了优质Web架构的系统,从而为系统提供更好的可伸缩性,并降低开发难度。关于REST架构的主要原则如下:网络上的所有事物都可被抽象为资源(Resource)。每个资源都有一个唯一的资源标识符(Resource Identifier)。同一资源具有多种表现形式。使用标准方法操作资源。通过缓存来提高性能。对资源的各种操作不会改变资源标识符。所有的操作都是无状态的(Stateless)。仅从上面几条原则来看REST架构,其实依然比较难以理解,下面笔者将从如下二个方面来介绍REST。资源和标识符现在的Web应用上包含了大量信息,但这些信息都被隐藏在 HTML、CSS 和 JavaScript 代码中,对于普通浏览者而言,他们进入这个系统时无法知道该系统包含哪些页面;对于一个需要访问该系统资源的第三方系统而言,同样无法明白这个系统包含多少功能和信息。URI 和 URL与 URI 相关的概念还有 URL,URL 是 Uniform Resource Locator,也就是统一资源定位符的意思。其中 http://www.crazyit.org 就是一个统一资源定位符,URL 是 URI 的子集。简而言之:每个 URL 都是 URI,但不是每个 URI 都是 URL。从REST架构的角度来看,该系统里包含的所有功能和信息,都可被称为资源(Resource),REST 架构中的资源包含静态页面、JSP 和 Servlet 等,该应用暴露在网络上的所有功能和信息都可被称为资源。除此之外,REST 架构规范了应用资源的命名方式,REST 规定对应用资源使用统一的命名方式:REST 系统中的资源必须统一命名和规划,REST 系统由使用 URI(Uniform Resource Identifier,即统一资源标识符)命名的资源组成。由于REST对资源使用了基于 URI 的统一命名,因此这些信息就自然地暴露出来了,从而避免 “信息地窖”的不良后果。对于当今最常见的网络应用来说,资源标识符就是 URI,资源的使用者则根据 URI 来操作应用资源。当 URI 发生改变时,表明客户机所使用的资源发生了改变。从资源的角度来看,当客户机操作不同的资源时,资源所在的Web页(将Web页当成虚拟的状态机来看)的状态就会发生改变、迁移(Transfer),这就是REST术语中 ST(State Tranfer)的由来了。客户机为了操作不同状态的资源,则需要发送一些 Representational 的数据,这些数据包含必要的交互数据,以及描述这些数据的元数据。这就是REST术语中 RE(Representational)的由来了。理解了这个层次之后,至于REST如何翻译、或是否真正给它一个中文术语,读者可自行决定。