RESTful架构下图书管理系统的研究与实现
唐明伟, 卞艺杰, 陶飞飞
河海大学商学院 南京 210098
摘要

针对目前图书管理系统架构在实现信息共享方面的技术瓶颈,引入REST概念,介绍并分析RESTful Web服务架构,以图书管理工作中的入库、修改、报废、查询和借还业务为例,设计并实现基于RESTful Web服务的图书管理系统,为构建适合轻量级信息共享的图书管理系统提供参考,并通过测试证实该系统在实现轻量级图书信息共享方面的优越性和可行性。

关键词: REST; RESTful; Web服务; 图书馆管理系统; 面向资源
中图分类号:G202
Research and Implementation of Books Management System Based on RESTful Architecture
Tang Mingwei, Bian Yijie, Tao Feifei
Business School,Hohai University, Nanjing 210098,China
Abstract

Aiming at the technology bottlenecks of current books management system in information sharing, the paper imports the concept of REST, introduces and analyzes the architecture of RESTful Web Services.It takes storage, updating, retrieval and borrowing/returning in books management business as examples, designs and implements the books management system based on RESTful Web Services to provide reference implementation of constructing books management system which fits lightweight sharing of information. Finally, it proves the superiority and feasibility of system in implementing lightweight sharing of books information.

Keyword: REST; RESTful; Web services; Books management system; Resource-oriented
1 引 言

目前,大多数图书馆已建立了各自的图书管理系统,然而由于建立的时间不同,采用的信息技术、实现方式也不尽相同,使得各图书管理系统之间无法实现信息共享,从而造成各图书管理系统相对封闭的局面,在当今的信息社会,这一点已经不能满足日益增长的信息获取需求。自1995年开始,江苏省高校以“通用借书证”的方式逐步实现了江苏各高校图书馆的馆际互借[ 1],然而由于各高校图书管理系统异构性等问题的存在,迄今还没有高校通用查询系统的面世。系统异构性引起的不仅仅是查询的不便,同时也限制了系统本身的扩展性。这一现象存在于各个有图书管理系统的国家或地区中,本质上是数字图书馆发展到一定阶段产生的瓶颈。

2 数字图书馆信息共享研究现状

国内外图书情报领域对数字图书馆信息共享的研究主要集中在与网格、Web服务等信息共享技术的结合上。郑志蕴等[ 2]于2005年提出了一种基于网格技术的数字图书馆互操作框架(DL Grid),该框架使用网格技术实现对异构信息的集成,并使用OAI-PMH操作协议作为异构系统之间信息交互的标准,实现了数字图书馆之间信息的共享,但DL Grid中网格节点的运行依赖于网格中间件,属于紧耦合集成,并不适用于独立提供服务的小规模数字图书馆。Santos[ 3]等于2008年提出了基于WS-ODL的数字图书馆系统,该系统使用ODL协议对数字资源进行描述,使用Web服务实现资源的共享,既实现了异构资源的集成和访问,同时又能兼容任何采用OAI/ODL协议的数字图书馆系统。相比网格技术,Web服务更适合于小规模数字图书馆的信息共享。基于Web服务的管理系统,既能通过WSDL单独提供服务,又能将相关访问信息发布到UDDI[ 4]上提供集成服务,属于松耦合集成,可用于任何规模的数字图书馆的构建。然而Web服务的运行模式并没有充分利用HTTP协议的特点,反而因为WSDL和SOAP的复杂性,增加了系统开发与调用的难度,同时也增加了网络传输的负载。

针对上述研究存在的问题,本文重点介绍了RESTful Web服务,通过分析图书管理业务,设计了基于RESTful Web服务的轻量级图书管理系统,该系统将图书管理中涉及的业务实体抽象成资源,用URI对资源进行标识,将所有针对资源的操作请求以GET、POST、PUT和DELETE 4种HTTP方法提交至对应的URI,执行相应的操作,同时以WADL(Web应用描述语言)的方式对第三方系统发布资源描述服务,并结合Dublin Core[ 5]元数据设计了信息发布格式,试图为构建适合轻量级信息共享的数字图书馆系统提供参考实现,用Restlet框架简单实现了该系统。

3 RESTful Web服务概述
3.1 REST简介

表示性状态转移 (REpresentational State Transfer,REST)是由Fielding于2000年在其博士论文中提出的概念,是一种充分利用Web特性的、使得一个良好设计的Web应用可以向前推进的软件架构风格[ 6]

在一个REST风格的Web架构中,所有需要操作的事物都被抽象为资源,每个资源均被赋予一个资源标识符URI。URI既是资源的名称,也是其访问地址,用户通过URI可以获得资源的表示,即Web页面,而不同的资源表示中又包含了其他表示的URI,通过这些URI可以获得其他资源的表示,使得程序能进一步进行。其中通过URI进行的资源表示的变化,即状态转移。

3.2 RESTful Web服务

RESTful Web服务是符合REST风格的轻量级Web服务架构[ 7],它以完成业务为目标,将一切与业务相关的事物抽象为资源,并为每个资源赋予一个URI标识,用户在提交请求时,将作用域信息置于URI中,并且使用不同的HTTP方法提交请求,即可对该URI代表的资源执行相关操作,其中常见的HTTP方法为POST、GET、PUT和DELETE,对应资源的创建、读取、更新和删除操作,简称CRUD操作。而作用域信息则通常表现为URI中包含的参数,如http://xxx?title=book,其中title=book即作用域信息,代表了指定资源中更明确的作用对象。由此可见,URI即资源的统一访问接口,RESTful Web服务只要对外界暴露URI即对外发布服务, RESTful Web服务的请求和响应如图1所示:

图1 RESTful Web服务的请求和响应过程

客户端发送请求时,将请求数据置于HTTP文档主体中[ 8],并使用HTTP请求方法向URI1提交请求。服务器端接收到请求后,根据请求的方法类型,调用对应的方法执行请求。当服务器端处理完请求后,返回HTTP响应代码和报头[ 8],并将得到的相关数据置于HTTP文档主体中,转向URI2,最后返回给客户端。RESTful Web服务对响应数据的格式并没有特殊要求,可以使用HTML、XML、TEXT或JSON等多种格式。

客户端还可通过WADL对RESTful Web服务进行有目的的访问,WADL定义了客户端可以发送的各种HTTP请求、可访问的URI、可执行的方法及相关参数以及返回的数据格式等[ 9]

4 基于RESTful Web服务图书管理系统的设计与实现思路

RESTful Web服务是面向资源的服务,因此使用RESTful Web服务构建图书管理系统,重点是分析图书管理业务,将业务涉及的事物抽象成资源,根据业务为每个资源设计URI和资源表示。资源确定后,才可以设计图书管理系统的总体架构,进而根据总体架构,使用开发工具实现整个系统。

4.1 图书资源分析与设计

图书管理是图书馆工作中的一个重要环节,业务复杂多样。为了清晰地描述开发过程,本文以图书管理中图书编目入库、修改、报废、借阅、归还和查询6个典型业务作为系统的核心业务。这6个业务均围绕图书展开,因此图书可被抽象成资源,其中入库对应资源的创建、查询对应资源的读取、修改/借阅/归还对应资源的修改、报废对应资源的删除。查询还可细分为三类:查询所有图书、查询单本图书、按关键词查询。进一步分析,图书入库、查询所有图书和按关键词查询均是针对整个图书资源而言,因此图书资源还需要划分为所有图书资源和单本图书资源,其URI设计如下:

(1)所有图书资源

URI:http://hostname/resource/books

(2)单本图书资源

URI:http://hostname/resource/books/{bookid}

理论上,通过以上两种形式的URI发送HTTP请求可以实现所有的图书管理业务,但在实际业务处理时,往往存在同一个URI和相同的HTTP方法,但需要实现不同的功能,或者返回资源的不同表示的情况,这时候通常使用作用域信息来区分。相应的URI资源下HTTP方法与作用域信息结合,触发不同的系统功能,其对应关系如表1所示:

表1 资源URI、HTTP方法、作用域信息与系统功能对应关系

对于资源表示的格式,图书管理系统的本地用户使用较友好的HTML格式,而对于第三方系统则采用机器可读的JSON格式[ 10]

4.2 系统总体架构

系统的总体架构如图2所示:

图2 基于RESTful Web服务的图书管理系统总体架构

系统分为数据层、功能层、资源层和应用层。

(1)数据层

该层由数据库和数据访问接口组成。数据访问接口定义了对数据库记录的查询、增加、修改和删除接口,任何涉及这4种操作的方法均要实现该接口才能对数据库记录进行操作,起到规范访问数据库的作用。

(2)功能层

该层接受资源层的方法调度,执行对应的功能方法,这些方法与数据层进行通信,将得到的数据返回给资源层。

(3)资源层

该层由资源和URI组成,通过对外显示图书资源的URI来发布服务。资源层接受用户请求,根据HTTP请求的方法类型,调用功能层的方法,并视用户类型的不同,对返回数据以JSON或HTML格式封装后返回给用户。这一层为整个系统的中心,既是用户提交请求和接收数据的接口,也是系统接受和响应请求的接口,体现了以资源为中心的RESTful Web服务架构的特点。

(4)应用层

该层管理用户提交的请求。系统用户分为系统内用户和系统外用户。系统内用户是在图书管理系统数据库里注册的用户,这类用户对系统的操作均可按照系统页面的提示来完成。系统外用户是为获取本系统图书信息的第三方图书管理系统,由于这类用户并不是自然人,无法根据页面提示来访问本系统,因此系统对外提供了功能描述的WADL,系统外用户根据WADL提供的访问规则,即可正常获取信息。对于系统外用户,一般只开放查询的功能。

4.3 系统开发与实现

使用Java 作为图书管理系统的基础架构,JDK版本为1.5,选择NetBeans6.8为集成开发工具,GlassFish v3为应用程序服务器,数据库采用MySQL5.1,RESTful Web服务架构使用Restlet1.1.5来构建。按照系统总体架构,从数据层到应用层的实现如下:

(1)数据层的实现

数据层使用MySQL作为数据库,使用MySQL JDBC驱动,通过数据库连接类DBConnect和数据访问接口DAO实现对数据库的操作。结合Dublin Core元数据和图书常用描述属性,定义图书表Book的结构如表2所示:

表2 图书表Book

MySQL JDBC驱动用于访问MySQL数据库,数据连接类DBConnect通过JDBC驱动封装了对数据库连接、预处理等基本的数据操作。数据访问接口DAO定义了Insert、Update、Delete、GetObjects、borlend等5个抽象方法,分别对应入库、更新、报废、查询(所有图书、单本图书、按关键词查询)和图书借还。

(2)功能层的实现

功能层通过book和bookDAO两个类实现,book类是Book表记录的持久化封装,由和Book表字段相对应的属性以及对应属性的SET和GET方法组成。bookDAO实现了数据访问接口DAO,结合DBConnect类,实现对图书的入库、更新、报废、查询和借还5种操作。

(3)资源层实现

资源层是整个系统的核心,其主要实现步骤如图3所示:

图3 资源层开发步骤

①资源类的实现:创建单本图书资源类bookResource和所有图书资源类booksResouce,将这两个类继承Restlet框架中的Resource类使其成为Restlet框架中的资源类。Resource中定义了Representation、acceptRepresentation、storeRepresentation和removeRepresentation 4个方法,分别对应GET、POST、PUT和DELETE,在相应的资源类中,根据业务重载这些方法即可实现相应的CRUD操作。

②资源管理类的实现:创建BookApp类,继承Restlet的Application类使其成为资源管理类,重载其中的createRoot方法来实现对资源的管理,在createRoot方法中,使用Router类分别为两个图书资源类分配路径,实现资源类的注册。

③在Web项目中建立REST式映射:将BookApp类和RestletServlet类在web.xml中建立类和路径映射。RestletServlet类是Restlet框架内置的类,用于接收用户请求,并转发至资源管理类。其中服务器主机名、RestletServlet的访问路径和BookApp中资源类的路径共同组成了URI,用户向该URI提交请求,RestletServlet接收请求并转发给BookApp,再由其转发至对应的资源类,调用相应的方法执行操作。

(4)应用层实现

应用层主要是实现资源的表示,系统内用户访问的是HTML格式的资源表示,而系统外用户访问的则是JSON格式的资源表示。

①对于系统内用户,资源的HTML表示的实现过程为:按照使用Restlet框架中的Freemarker的规则设计HTML模板;重载资源类中的Represent方法,在其中设置HTML模板所在路径以及相关数据集。用户以GET方法访问资源的时候,系统会按照路径加载模板,返回HTML格式的资源表示。

②对于系统外用户,由于Restlet的资源类提供了资源表示的格式设置,在相应的Represent方法中将资源表示设置成JSON即可,重点是WADL的开发。Restlet通过对MethodInfo类对象进行参数设置来实现对方法的WADL描述,以所有图书资源类booksResource的GET方法描述为例,其WADL文档的实现过程为:booksResource继承Restlet中的WadlResource类,重载其中的describeGet方法,在该方法中将Representation方法的特点以参数的形式写入MethodInfo对象中,并返回。系统外用户通过Restlet的Reference和Client两个类,输入对应的URI,即可获得WADL文档。其他几个HTTP方法的WADL描述通过重载describeXXX方法来实现。

5 系统运行测试与分析

系统测试的目标是检查系统运行是否符合REST风格,能否实现轻量级信息共享。分别以系统内用户和系统外用户的身份测试:系统内用户测试对象为所有图书资源的查询、单本图书的修改、借还;系统外用户测试对象为所有图书资源的WADL访问和JSON表示。

根据系统内外用户的访问特点,浏览器可视为系统内用户,而任何独立于图书管理系统、遵守HTTP协议提交请求的第三方程序均可视为系统外用户。系统运行后,所有图书资源的URI为http://localhost:45810/BookMIS/resource/books,单本图书资源的URI为http://localhost: 45810/BookMIS/resource/books/ {bookid},其中bookid是图书在数据库中的唯一标识,是动态值。

(1)系统内用户测试

在浏览器里输入http://localhost:8080/BookMIS/ resource/books,系统以HTML返回所有图书信息,如图4所示:

图4 所有图书资源的HTML表示

其中对《管理信息系统》一书分别执行修改和归还操作,测试所得的URI如表3所示:

表3功能链接的URI

(2)系统外用户测试

采用独立于该图书管理系统的Java程序,在NetBeans中模拟浏览器向目标URI发送查询请求。经测试,程序可成功获取所有图书资源的WADL文档和JSON表示,如图5图6所示:

图5 所有图书资源的WADL

图6 所有图书资源的JSON表示

从系统测试的结果来看,该系统运行符合REST风格,并且第三方程序可以成功获得WADL,根据WADL可获得所有图书资源的JSON表示,由于JSON格式独立于程序语言,并且具有易解析性和自描述性[ 11],表明该图书管理系统可以实现轻量级信息共享。

6 结 语

针对当前图书管理系统架构在信息共享上的技术瓶颈,引入REST概念,设计并实现了基于RESTful Web服务的图书管理系统,为构建轻量级的信息共享平台提供了参考。从系统运行和测试的过程来看,该系统充分利用了HTTP协议的特点,以URI的方式统一资源访问接口,既实现了系统数据的规范管理,又实现了数据的轻量发布和共享。虽然本文构建的图书管理系统的核心业务仅仅是现实业务的一小部分,但是系统实现过程清晰、完整地展示了构建轻量级信息共享平台的方法,参照该方法可以构建一个业务功能全面、适合轻量级信息共享的图书管理系统,但是要实现各图书管理系统之间信息的无缝整合和友好访问,还需要考虑信息授权、安全传输和统一检索等诸多问题,这有待更进一步的研究。

参考文献
[1] 刘八一, 伍玲玲. 文献资源共享新模式的探索与实践——江苏省高校“通用借书证”运作十年的回顾与思考[J]. 大学图书馆学报, 2006, 24(5): 11-15, 81. [本文引用:1]
[2] 郑志蕴, 闭乐鹏, 牛振东, . 数字图书馆网络互操作框架[J]. 计算机工程与应用, 2005, 41(25): 186-189. [本文引用:1]
[3] Santos R L T, Roberto P A, Gonçalves M A, et al. A Web Services-based Framework for Building Componentized Digital Libraries[J]. Journal of Systems and Software, 2008, 81(5): 809-822. [本文引用:1] [JCR: 1.135]
[4] Pastore S. The Service Discovery Methods Issue: A Web Services UDDI Specification Framework Integrated in a Grid Environment[J]. Journal of Network and Computer Applications, 2008, 31(2): 93-107. [本文引用:1] [JCR: 1.467]
[5] Lee-Smeltzer K H. Finding the Needle: Controlled Vocabularies, Resource Discovery, and Dublin Core[J]. Library Collections, Acquisitions, and Technical Services, 2000, 24(2): 205-215. [本文引用:1]
[6] Fielding R T. Architectural Styles and the Design of Network-based Software Architectures[D]. USA: University of California, Irvine, 2000. [本文引用:1]
[7] Richardson L, Ruby S. RESTful Web Services[M]. Sebastopol: O’Reilly Media, 2007: 15-21. [本文引用:1]
[8] Spreitzer M, Janssen B. HTTP ‘Next Generation’[J]. Computer Networks, 2000, 33(1-6): 593-607. [本文引用:2] [JCR: 1.231]
[9] Battle R, Benson E. Bridging the Semantic Web and Web 2. 0 with Representational State Transfer(REST)[J]. Web Semantics: Science, Services and Agents on the World Wide Web, 2008, 6(1): 61-69. [本文引用:1]
[10] Downes S, Belliveau L, Samet S, et al. Managing Digital Rights Using JSON[C]. In: Proceedings of the 7th IEEE Consumer Communications and Networking Conference, CCNC 2010Piscataway, NJ, United States: IEEE Computer Society, 2010: 1-10. [本文引用:1]
[11] Houlding S W. XML - An Opportunity for meaningful Data Stand ards in the Geosciences[J]. Computers & Geosciences, 2001, 27(7): 839-849. [本文引用:1]