随着 Web 2.0 的 发展,REST(Representational State Transfer)风格的 Web Service 得到普遍的应用,各种 REST 框架如雨后春笋般发展起来。当我们从事 Web 2.0 的实践时,越来越感觉到服务器端的 REST 服务在应对 MIS 一样的信息系统以及和数据库的交互时还存在很大的问题,比如效率低下,重复编码等。
例如,我们假定如下的场景:需要使用 Web 2.0 的技术来实现一个信息管理系统,这个系统的主要的任务就是对后台数据库的业务数据的操作,管理和报表。这样的场景在如财务等这样的业务系统中非常常见。我们可以使用实体 Bean 实现 EJB,再将该 EJB 包装成为 REST 服务,或者使用轻量级的 Hibernate,配合各种 Java 的 REST 框架来实现,但是无论如何都不可避免需要做很多的重复编码,或者要实现大量的数据库操作。既然 REST 将服务看成是资源的服务,那么我们可以认为数据库中的数据也是一种资源。有没有方法直接将它们转化为 REST 服务呢?sqlRest 正是这样一种框架,它是一种高效的轻量级数据库 REST 服务解决方案,可以通过简单配置直接将数据库中的数据暴露成 REST 风格的 Web 服务,并将数据库的 CRUD 操作和 REST 服务的 GET, DELETE, POST, PUT 接口对应起来。
本文将介绍这一框架的配置和运行,并讨论如何测试 REST 服务,最后给出了配置 DB2 实现 DB2 中的资源 REST 化的参考办法,相信会对 Web 2.0 和 REST 服务的开发者带来一定的参考价值。本文的示例基于 Eclipse 3.2 和 JDK1.5,Servlet 容器使用的是 Tomcat 5.5 。
sqlRest 第一步
下载和运行
sqlRest 是 sourceforge 站点上的一个开源项目,它使用一个 Servlet 实现了基于数据库的 REST 引擎,可以自动的将数据库的表映射成 REST 资源,用户可以使用 URL 获取表的内容 (XML 格式),并进行相关操作。
我们首先下载一个二进制的包来运行 sqlRest 示例。您可以通过 http://sourceforge.net/projects/sqlrest/ 访问该项目。在首页上点击下载,进入下载页面下载 sqlrest-0.3.2 版本,这也是目前唯一可用的版本。
下载后解压缩,请先确认安装了 JRE 1.4.1 和 TOMCAT 4.1 以上版本。将解压缩目录内 webapps 目录下的 sqlrest 目录拷贝到 TOMCAT 的 webapps 目录中。启动 TOMCAT,在您的浏览器内键入 http://localhost:8080/sqlrest, (如果您的 TOMCAT 的端口是 8080),您将看见如图 1 的 sqlRest 的 Web 界面:
图 1. sqlRest 初始 Web 界面
该页面描述了数据库中有 4 种可用的 REST 资源,这说明安装成功,我们也就可以开始进一步的工作。
这里读者需要注意,根据 JRE 版本和类型的不同,可能在启动的时候 TOMCAT 会出错(参考如图 2 的错误信息),sqlRest 的 Servlet 无法加载,造成错误的原因是我们下载的 sqlRest 是二进制版本,而编译 sqlRest 的 JRE 和我们运行 Tomcat 的 JRE 之间存在不兼容。解决方法是获取 sqlRest 的源码,在运行环境中重新编译,再将编译的 class 文件拷贝到 Tomcat 中的 webapp/sqlrest/WEB-INF 目录中的 classes 目录下重新启动就可以了。如果选择从源码项目开始编译和部署运行,就可以避免这一错误(TOMCAT 和 Eclipse 使用的是同一 JRE),下面您将了解到如何从 CVS 获取代码并从源码开始编译部署 sqlRest 。
图 2. 不同的 JDK 的兼容性问题引起的启动错误