基于REST的Web系统设计与实现

2017-03-31 11:30胡彦婷
软件导刊 2016年8期

胡彦婷

摘 要:为了改善传统Web系统存在的问题,研究了基于表述性状态转移(representational state transfer,REST)的Web系统设计,对其如何应用于棉花交易平台的构建进行了介绍。实践表明,基于REST的棉花Web交易系统不仅能满足目前棉花電商交易需求,而且具有良好的扩展性和可维护性。

关键词关键词:REST;Web系统;JSON;HTTP;资源表示;电商平台设计

DOIDOI:10.11907/rjdk.161405

中图分类号:TP319

文献标识码:A 文章编号:1672-7800(2016)008-0122-02

0 引言

互联网的迅速发展,对Web系统设计提出了新的要求。传统Web系统存在设计不规范、接口不统一、扩展困难、难于集成等问题。为了改善此状况,Roy Thomas Fielding[1]提出了表述性状态转移(Representational State Transfer,REST) 的设计风格,并将其用于规范Web系统设计。REST具有轻量级、平台无关性、高扩展性、便于缓存等优点[2],已被Google、Amazon、yahoo、腾讯、新浪、阿里巴巴等国内外多家企业采用[3]。

本文将以一个大宗农产品电商平台——大渊博棉花交易中心(www.dybcotton.com)为例,对REST在Web系统设计中的应用进行分析和讨论。

1 REST风格

REST包含了4个方面的核心内容:①资源(Resource);②资源表述(Representation);③状态转移(State Transfer);④统一接口(Uniform Interface)。资源是系统中业务实体的抽象,可以由一个或一组统一资源定位符URI(Uniform Resource Identifier)进行标识。URI既是资源的名称,也是资源在系统中的地址,用户通过资源的URI与资源进行交互。资源表述是指资源在特定时刻的状态,可以在用户和系统间传递,其有多种形式,如HTML、XML、JSON、文本等。状态转移指资源表述在客户端和服务器端之间的传递,通过这种传递,实现对资源的操作。统一接口是REST对资源操作方式的规范,要求对每种资源都以统一的方式操作。用户通过请求URI访问资源,也可在请求中附加元数据Metadata来决定资源的表现形式,然后通过HTTP协议的GET、PUT、POST和DELETE方法[4]实现对资源的操作。

2 大渊博平台系统设计

棉花是重要的大宗农产品,目前全国每年生产皮棉400多万吨,其中70%~80%产自新疆,距离遥远,种植和加工分散,信息获取不易,造成交易不便。在传统贸易模式中人们要获取货源信息,只能通过电话、传真或派专人出差到产地企业,成本高、效率低,信息滞后严重。为了解决传统贸易存在的问题,有必要利用互联网高效便捷的优点,建立统一规范的电商交易平台。鉴于此,本系统的目标是建立包含棉花加工信息、质量信息、仓储物流信息及交易信息的棉花电商平台,降低交易成本、提高贸易效率。

本系统从逻辑上分为业务功能、支撑模块、底层服务3部分,如图1所示。

(1)业务功能模块主要负责与用户交互,根据用户请求将数据以不同的形式展现出来。目前数据展示的方式有两种,一种是用于桌面系统的Web网页形式,数据以HTML+AJAX+JSON的形式展现。另一种是用于Android和IOS系统手机端的APP,数据以JSON的形式展现。两种方式均通过REST接口从服务器端获取数据。

(2)支撑模块为业务功能提供服务支撑,完成用户管理、订单消息分发、系统事件记录、数据抓取及统计挖掘等功能。

(3)底层服务包含数据存储、数据缓存、支付接口和均衡负载4部分。本系统使用MySQL作为数据存储,用Memcache作为数据缓存,集成了支付宝和银联支付接口,使用Apache反向代理实现均衡负载。

3 REST在系统中的应用

3.1 系统框架结构

本系统使用PHP语言实现的REST风格框架,该框架结构如图2所示。在框架中,URL映射由Apache mod_rewrite[5]实现,前端控制器由设计模式中的Front Controller模式[6]实现,资源以HTML或JSON格式展现。框架的基本执行步骤为:①用户请求通过URL映射转发至前端控制器;②前端控制器对请求进行解析,识别所需要的服务;③框架调用对应的资源完成业务操作。

根据REST设计规范,在进行系统设计时,首先是确定系统中的实体,即资源,并为资源指定唯一的URI;然后,根据业务逻辑确定资源的操作方式;最后,根据用户需求确定资源的表现形式。下面以棉花在线购买业务为例进行讨论。

3.2 资源划分与命名

构建REST风格的系统最重要的一步就是识别系统中的资源。本系统包含的主要资源为:①棉花批次(Batch),其为棉花加工、交易的基本单位,具有国家统一分配的批次编码;②轧花厂(Producer),即为棉花生产加工企业,具有国家统一分配的企业代码。该代码与棉花批次编码为一对多关系;③监管仓库(Entrepot),其为国家统一认证的棉花专用监管库,主要对棉花进行第三方监管及对棉花质量的公检。很多情况下,仓库也作为轧花厂的代理人,进行棉花贸易;④买家(Buyer),即棉花购买者,通常为纺织企业或贸易商;⑤交易订单(Order),其包含购买批次列表,买方、卖方、支付方式等信息,由买家建立并提交给卖家。

确定了资源之后,即可为资源指定URI,其规则为“http://服务器根目录/资源类别/资源标识”。根据REST规范,系统中每个URI只能指向一个资源,同时URI只表示资源,不包含对资源的操作。在本系统中,以“http://www.dybcotton.com/”作为系统的根目录,用URI模板来表示资源。URI模板定义了URI的格式,其中包含一系列变量,这些变量在运行时会被实际参数所取代。例如,http://www.dybcotton.com/batch/{batchId},该模板定义了棉花批次的访问方式,变量{batchId}用来表示棉花批次编码,在运行时{batchId}被实际的批次编号所取代。根据这种方法,本系统为每个资源设定的URI模板如表1所示。

3.3 资源统一接口定义

完成资源的划分与命名之后,下一步为资源定义相应的操作接口。在REST规范中,用HTTP协议的GET、PUT、POST、DELETE方法對资源分别进行创建(Create)、读取(Read)、更新(Update)及删除(Delete)操作。

虽然HTTP协议定义了4种方法,但目前主流浏览器对4种HTTP方法的支持并不统一,只有GET和POST方法得到了广泛的支持,而PUT和DELETE方法在很多浏览器上没有支持或只部分支持。为了保持浏览器兼容性,当前通常用POST方法替代PUT和DELETE方法,完成资源的添加、更新及删除操作。鉴于此,本系统设计的资源操作接口如表2所示。

3.4 资源表现形式

在对资源命名并为其定义了统一的操作接口后,需要考虑通过URI对资源进行操作时,客户端和服务器端应采用哪种数据格式进行交互。REST规范并未限定数据交互的格式,允许纯文本、HTML、二进制数据、XML、JSON等多种格式,其中XML和JSON是目前应用最为广泛的格式。本系统采用JSON作为数据交互格式。JSON是一种轻量、冗余少、结构简单、与平台无关、方便程序解析的数据格式[7]。

下面以客户端请求加工企业代码为65551的轧花厂信息为例,来说明本系统如何根据请求返回JSON格式的轧花厂资源信息。

根据表2,要获取轧花厂信息,客户端向http://www.dybcotton.com/producer/65233发送GET请求,为保证服务器端正确返回JSON格式响应,还需要在HTTP请求的Header中增加元数据“Accept=application/json”。当服务器端接收到请求后,将返回如下JSON数据:

{

“producerID”:”65551”,

“producerName”:” 奎屯康泰棉麻有限公司”,

“address”: “奎屯市独山子经济技术开发区”,

……

}

通过上述步骤完成对资源的访问。类似地,可以使用HTTP的POST方法向资源URI发送JSON格式的数据,以进行资源的创建、更新和删除操作。

4 结语

本文研究了REST规范对Web系统设计的指导作用,并将其应用于大渊博棉花交易系统的设计与开发。该系统满足了目前棉花业务需求,具有良好的扩展性和可维护性,能很好地服务于棉花产业链的生产和销售环节,成为国内有一定影响力的农产品电商平台。

参考文献:

[1] R T FIELDING.Architectural styles and the design of network-based software architectures[D].Irvine:University of California,2000.

[2] 盛伟翔,王昊,董晓睿,等.基于REST架构风格的精品课程平台建设[J].南昌大学学报:理科版,2015,39(3): 251-254.

[3] 陈彦名.REST API技术及在移动通信网络管理中的应用[J].电信工程技术与标准化, 2015(5): 81-85.

[4] Hypertext transfer protocol——HTTP/1.1 [EB/OL] .https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html.

[5] Apache module mod_rewrite[EB/OL].http://httpd.apache.org/docs/current/mod/mod_rewrite.html.

[6] MARTIN FOWLER.Patterns of enterprise application architecture[M].Boston: Addison-Wesley,2002.

[7] 张沪寅,屈乾松,胡瑞芸.基于JSON的数据交换模型[J].计算机工程与设计,2015,36(12): 3381-3384.

(责任编辑:杜能钢)